문제 링크

개요

  • 딕셔너리를 사용해 해결할 수 있는 문제다.

문제 조건

  • 일정 횟수 이상 신고당한 불량 이용자를 신고한 이용자들에게 발송되는 메일의 횟수를 리스트로 반환하는 문제다.

문제 해설

  • 이용자 자신이 신고당한 횟수(report_dict)와 이용자가 신고한 대상 목록(mail_dict)을 각각 기록할 필요가 있다.
  • 각각의 신고 건수에 대해 반복하며 두 가지 딕셔너리에 기록한다.
  • 이용자id를 key로 참고하여 각각의 이용자마다 자신이 신고한 대상 중 정지된 대상의 수를 계산한다.

해설 코드

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
def solution(id_list, report, k):
    report_dict = {id: 0 for id in id_list}
    mail_dict = {id: set() for id in id_list}

    for rep in set(report):
        user, target = rep.split()
        report_dict[target] += 1
        mail_dict[user].add(target)

    answer = []

    for user, targets in mail_dict.items():
        answer.append(sum([1 if report_dict[target] >= k else 0
                            for target in targets]))

    return answer