[프로그래머스 LV2] 신고 결과 받기

Junyoung Park·2022년 1월 20일
0

코딩테스트

목록 보기
45/631

1. 문제 설명

신고 결과 받기

2. 문제 분석

중복 체크 및 카운트가 관건인 문제. 시간 효율성을 위해 리스트가 아닌 딕셔너리로 구현하였다. 딕셔너리/리스트 컴프리헨션을 통해 간결하게 표현하자. 질문 케이스를 살펴보니 시간 초과 등 문제가 있었는데, 파이썬의 경우 딕셔너리가 대부분 (해쉬 기능을 통해) 시간 효율성을 매우 높일 수 있는 좋은 자료구조라 생각한다.

3. 나의 풀이

def solution(id_list, report, k):
    ids = {id:set() for id in id_list}
    for rep in report:
        reporter, reported = rep.split(" ")
        ids.get(reported).add(reporter)
    # 딕셔너리 사용. 각 id는 자신을 신고한 reporter를 기록한다. 중복 케이스는 set으로 커버.
    
    report_cnt = {id:0 for id in id_list}
    # 자신을 신고한 reporter 수가 k 이상이면 해당 reporter에게 보내지는 메일 +1.

    for value in ids.values():
        if len(value) >= k:
            for reporter in value:
                cnt = report_cnt.get(reporter)
                report_cnt[reporter] = cnt+1
    result = [cnt for cnt in report_cnt.values()]
    # id_list 순서대로 기록되었으므로(defaultdict와 상동) 그대로 리스트로 return.
    return result
profile
JUST DO IT

0개의 댓글