본문 바로가기
Algorithm/프로그래머스

[프로그래머스] Lv1 - 신고 결과 받기 (파이썬)

by 2HS 2022. 3. 15.

https://programmers.co.kr/learn/courses/30/lessons/92334

 

코딩테스트 연습 - 신고 결과 받기

문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의

programmers.co.kr

 

from collections import defaultdict


def solution(id_list, reports, k):
    reported = dict()
    for report in reports:
        x, y = report.split(' ')
        if not reported.get(y):
            reported[y] = set([x])
        else:
            reported[y].add(x)

    result = defaultdict(int)
    for id in id_list:
        if reported.get(id) and len(reported[id]) >= k:
            for x in reported[id]:
                result[x] += 1

    answer = [0] * len(id_list)
    for i, id in enumerate(id_list):
        answer[i] = result[id]
    return answer

 

해시

1. 신고리스트 reports를 딕셔너리로 관리를 한다. ( key : 신고 받은사람, value : 신고한 사람들의 집합)

    - 딕셔너리 내부에는 집합 set()을 이용해서 중복값을 제거한다.

2. 특정 인물을 신고한 사람들이 k명 이상이면 해당 집합의 사람들에게 모두 메일을 한통씩 보낸다.

    - len(reported[id]) : id를 신고한 사람들의 수

    - defaultdict를 이용해서 result 딕셔너리 관리 ( key: 사람, value: 메일을 받은 횟수)

3. 각각 모든 사람들 마다 answer에 메일을 받은 횟수만큼 초기화

    - 주어진 id_list순서대로 리스트를 만들기 위해서

4. return answer