본문 바로가기
👩🏻‍💻 Front-end/👾 Algorithm

프로그래머스 - 신고 결과 받기 (Python) (2022 KAKAO BLIND RECRUITMENT)

by su-no 2022. 5. 22.

코드

def solution(id_list, report, k):
    answer = []
    block_id = []
    
    set_report = set(report) # 1
    report_cnt = {id: 0 for id in id_list} # 2
    mail_cnts = {id: 0 for id in id_list} # 3

    for id in set_report: # 4
        report_cnt[id.split()[1]] += 1

    for i in report_cnt: # 5
        if report_cnt.get(i) >= k:
            block_id.append(i)

    for i in set_report: # 6
        if i.split()[1] in block_id:
            mail_cnts[i.split()[0]] += 1

    answer = list(mail_cnts.values()) # 7
    return answer

 

풀이

#1: 동일한 유저에 대한 신고는 중복되지 않으므로, set 자료형을 사용하여 list의 중복을 제거한다.

#2: 유저에 대한 신고 횟수를 저장하는 딕셔너리를 생성한다.

#3: 신고한 유저가 받는 메일 개수를 저장하는 딕셔너리를 생성한다.

#4: report를 ' ' 기준으로 split하여, 신고받은 유저의 신고 횟수를 증가시킨다.

#5: 만약 신고당한 횟수가 k 이상이면, block된 id list에 추가한다.

#6: 다시 report list로 돌아가서 block된 id를 신고한 유저가 있으면, mail cnt를 증가시킨다.

#7: dict 자료형의 value를 list로 변환하여 answer를 리턴한다!