본문 바로가기

코딩 테스트/Lv.1

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

문제

  • 각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다.
    • 신고 횟수에 제한은 없습니다. 서로 다른 유저를 계속해서 신고할 수 있습니다.
    • 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리됩니다.
  • k번 이상 신고된 유저는 게시판 이용이 정지되며, 해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 발송합니다.
    • 유저가 신고한 모든 내용을 취합하여 마지막에 한꺼번에 게시판 이용 정지를 시키면서 정지 메일을 발송합니다.

 

신고자에게 정지당한 유저에 대한 메일 발송 횟수를 리스트에 담아 반환하는 문제

 

풀이 과정

  • 제한시간이 주어졌으므로 리스트보다는 시간복잡도가 낮은 딕셔너리 사용
  • 신고 중복은 set으로 해결
  • 각 id 별 신고 당한 횟수 저장
  • K번 이상 신고 당한 사람이 있으면 send_mail에 해당 신고자 키 값에 +1

 

코드

def solution(id_list, report, k):
    report_list = {id : 0 for id in id_list} # 신고 당한 사람
    send_mail = {id : 0 for id in id_list} # 메일 발송
    
    report = list(set(report)) # 신고 중복 제거 
    
    for i in report:
        _, id = i.split(" ")
        report_list[id] = report_list[id] + 1
    
    for i in report:
        r, id = i.split(" ")
        if report_list[id] >= k:
            send_mail[r] = send_mail[r] + 1
    
    return list(send_mail.values())