https://school.programmers.co.kr/learn/courses/30/lessons/92334
def solution(id_list, report, k):
answer = []
id_dict = {i : set([]) for i in id_list} # id당 신고한 사람을 딕셔너리로 관리 / { 이름 : {} } -> 중복을 제거해야하므로 set으로 설정
num_dict = {i : 0 for i in id_list} # id당 신고 당한 횟수
for r in report :
p = r.split()
temp = id_dict[p[0]] # 추가하기 이전 set
id_dict[p[0]] = id_dict[p[0]].union({p[1]}) # 신고한 사람 추가
if len(temp) != len(id_dict[p[0]]): # 이미 한 번 신고한 이력이 있으면 pass
num_dict[p[1]] += 1 # 신고 당한 횟수 더하기
# 신고 당한 횟수가 k번 이상인 사람
p_list = [name for name, count in num_dict.items() if count >= k]
# 개별 직원마다 반복
for id in id_list :
count = 0 # 안내 횟수 초기화
for i in range(len(id_dict[id])) : # 이 사람이 신고한 사람 수만큼 반복
if list(id_dict[id])[i] in p_list :
count += 1
answer.append(count)
return answer
이번 문제는 딕셔너리 두 개를 가지고 풀었다. 각 딕셔너리는 아래와 같다.
이렇게 두 개의 딕셔너리를 세팅했다면, 신고 당한 횟수가 k 이상인 직원을 찾아 p_list에 넣는다.
이제 id_dict에서 신고한 사람이 k 이상인지 여부를 판단하는데, 반복마다 k회 이상인 사람의 수를 셀 count를 초기화 해 넣어준다.