def solution(id_list, report, k):
answer = []
count_dict = {}
mail_dict = {}
reporter_dict = {}
# 한 사람이 같은 사람을 여러번 신고한 건 카운트 하지 않음.
report = list(set(report))
# dict 초기화
for user_id in id_list:
count_dict[user_id] = 0
mail_dict[user_id] = 0
reporter_dict[user_id] = []
# report 에서 신고자, 신고당한 사람을 분리해서,
# 신고 당한 사람 : 신고 당한 횟수와 -> 기준치를 넘기는지 확인해야 함
# 신고 당한 사람 : 신고한 사람 배열을 저장. -> 메일 보내줘야 함
for r in report:
[reporter, bad_guy] = r.split(' ')
count_dict[bad_guy] += 1
reporter_dict[bad_guy] += [reporter]
for bad_guy in count_dict:
# 신고 당한 횟수가 기준치를 넘으면
if count_dict[bad_guy] >= k:
# 그 사람을 신고한 사람에게 메일을 보낸다. (한 사람이 메일 받는 횟수 저장)
for reporter in reporter_dict[bad_guy]:
mail_dict[reporter] += 1
# 메일 받은 횟수가 정답.
for user_id in id_list:
answer.append(mail_dict[user_id])
return answer
전에는 엄청 헷갈렸는데 딕셔너리를 잘 쓰게 되니까... 쉽게 풀 수 있었다.
하지만 이런 개멋진 풀이를 하기 위해선... 아직 멀었나보다.
def solution(id_list, report, k):
answer = [0] * len(id_list)
reports = {x : 0 for x in id_list}
for r in set(report):
reports[r.split()[1]] += 1
for r in set(report):
if reports[r.split()[1]] >= k:
# 신고 한 사람을 따로 저장하지 않고 id_list.index(r.split()[0]) 으로 사용.. 쩐다...
answer[id_list.index(r.split()[0])] += 1
return answer