728x90
난이도 : Lv. 1
풀이일 : 2411015
https://school.programmers.co.kr/learn/courses/30/lessons/92334
문제
아이디어
- id_list의 인덱스를 활용해서 문자열을 숫자처럼 사용하자
- complain 2차원 배열을 만들어, 각 이용자가 신고한 사람의 정보를 저장한다.
- complain 저장 시, count에 신고 당한 사람의 신고 당한 횟수를 저장한다.
- 이용자별로 신고한 사람 중 총 신고 횟수가 k 이상인 사람의 수를 출력한다.
전체 풀이 코드
def solution(id_list, report, k):
answer = [0] * len(id_list)
count = [0] * len(id_list) // 신고당한 횟수
complain = [[] for _ in range(len(id_list))] # 신고한 사람들
# 신고정보 입력 처리
for i in range(len(report)):
r, t = map(str, report[i].split())
# id_list의 인덱스로 이름을 숫자처럼 사용
if t not in complain[id_list.index(r)]:
complain[id_list.index(r)].append(t)
count[id_list.index(t)] += 1
# 내가 신고한 사람들의 신고 횟수 확인 및 기록
for i in range(len(id_list)):
for j in complain[i]:
if count[id_list.index(j)] >= k:
answer[i] += 1
return answer
상세 풀이 코드
def solution(id_list, report, k):
answer = [0] * len(id_list)
count = [0] * len(id_list)
complain = [[] for _ in range(len(id_list))]
- answer : 내가 신고한 사람 중 정지된 사람의 수
- count : 내가 신고당한 횟수
- complain : 내가 신고한 사람들 정보
for i in range(len(report)):
r, t = map(str, report[i].split())
if t not in complain[id_list.index(r)]:
complain[id_list.index(r)].append(t)
count[id_list.index(t)] += 1
- r, t : 신고한 사람, 신고 받은 사람
- 동일한 사람은 한 번만 신고할 수 있으므로, 이전에 추가한 적이 없는지 확인
- 처음 추가하는 사람은 complain에 기록하고, 신고당한 사람 count 추가
for i in range(len(id_list)):
for j in complain[i]:
if count[id_list.index(j)] >= k:
answer[i] += 1
return answer
- 각 사람이 신고한 사람들을 이중 반복하며, 해당 이용자가 신고한 이용자가 계정 중지 되었을 경우 answer + 1
느낀점
- 처음에는 people이라는 이름의 딕셔너리를 만들고, 이용자의 이름과 숫자를 함께 넣어서 이름이 사용되는 곳에서 딕셔너리를 이용해 접근했는데, id_list가 주어지니까 그렇게 하지 않아도 되어서 수정했다.
- 파이썬 인덱스를 아주 오랜만에 써봐서 조금 헤맸는데, 역시 처음 풀고 나서 어디 고칠 데 없나 살펴보는 과정이 더 재밌고 공부가 되는 느낌이다.
'알고리즘 > Lv. 1' 카테고리의 다른 글
프로그래머스 92334 신고 결과 받기 자바 풀이 (0) | 2024.11.01 |
---|---|
프로그래머스 250137 붕대감기 파이썬 풀이 (1) | 2024.10.30 |
프로그래머스 258712 가장 많이 받은 선물 파이썬 풀이 (0) | 2024.10.29 |
프로그래머스 131112 강원도에 위치한 생산공장 목록 출력하기 SQL 풀이 (1) | 2024.09.24 |
프로그래머스 59407 이름이 있는 동물의 아이디 SQL 풀이 (0) | 2024.09.22 |