[프로그래머스] level1 : 신고 결과 받기 - python

SUN·2022년 9월 24일
0

algorithm

목록 보기
20/30

문제

이번에 풀 문제는 신고 결과 받기이다.
2022 KAKAO BLIND RECRUITMENT 문제다.

풀이과정

그냥 해시써서 풀라는대로 풀었다.
결국 우리가 구해야되는건 어떤 사람이 얼마나 신고를 받았는 지 이기 때문에
신고 받은 사람을 key로 하고 신고한 사람들의 집합을 value로 하는 dict를 만들어야 겠다고 생각했다.
왜 집합이냐면 한 사람이 똑같은 사람을 계속 신고해도 한 번으로 취급하기 위해서다.
풀이 시간은 20~30분 정도 걸렸다.

알고리즘

  1. report_dicts[신고받은사람] = set(신고한 사람들) 이런 식으로 저장되도록 해시 맵을 만든다.
  2. 각 신고 받은 사람에 대해 그사람을 신고한 사람들의 set의 길이가 k이상이면 신고한 사람들에게 메세지를 보낸다.

최종 코드 - 주석 o

from collections import defaultdict

def solution(id_list, reports, k):
    report_dicts = defaultdict(set)
	
    for report in reports:
    	# reporting은 신고 한 사람, reported는 신고된 사람
        reporting, reported = report.split() 
        
        # 신고 된사람을 key로 신고한 사람들의 집합을 value로 저장함
        report_dicts[reported].add(reporting)
	
    msgs = dict.fromkeys(id_list, 0)
    
    for reported, reportings in report_dicts.items():
		# 이사람을 신고한 사람이 k명을 넘으면
        if len(reportings) >= k:
        	# 신고한 사람들에게 메세지
            for reporting in reportings:
                msgs[reporting] += 1

    return list(msgs.values())

최종 코드 - 주석 x

from collections import defaultdict


def solution(id_list, reports, k):
    report_dicts = defaultdict(set)

    for report in reports:
        reporting, reported = report.split()

        report_dicts[reported].add(reporting)

    msgs = dict.fromkeys(id_list, 0)
    for reported, reportings in report_dicts.items():

        if len(reportings) >= k:
            for reporting in reportings:
                msgs[reporting] += 1
    
    return list(msgs.values())

다른사람의 풀이

나랑 똑같이 푼 게 많아서 생략

profile
개발자

0개의 댓글