본문 바로가기
기술/Problem Solving

[Programmers] 신고 결과 받기

by 팡팡구리 2022. 1. 16.
반응형

출처


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

 

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

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

programmers.co.kr

 

 

문제


 

 

제한사항


 

 

풀이 및 코드


문제 조건대로 따라 구현만 하면 되는 문제이다.

신고를 1회도 하지 않은 유저 정보도 기록하기 위해 defaultdict를 사용하였다.

 

  1. 동일한 유저에 대한 신고는 1회만 가능하므로, set을 사용해 동일 유저에 대한 중복 신고를 제거 
  2. 신고 기록이 전혀 없는 유저 정보도 기록하기 위해 reporterDict의 key를 유저 아이디로 초기화
  3. 신고 기록에 따라 신고 기록을 reporterDict에, 신고당한 횟수를 targetDict에 기록
  4. 신고당한 횟수가 k번 이상인 유저ID를 bannedUser에 삽입
  5. reporterDict와 bannedUser를 list comprehension하여 카운트

 

from collections import defaultdict

def solution(id_list, report, k):
    report = list(set(report))					// report의 중복 제거
    reporterDict = defaultdict(list)
    targetDict = defaultdict(int)
    
    for userId in id_list:
        reporterDict[userId]
    
    for r in report:
        reporter, target = r.split()
        reporterDict[reporter].append(target)
        targetDict[target] += 1
        
    bannedUser = []
    for user, count in targetDict.items():
        if count >= k:
            bannedUser.append(user)
    
    answer = []
    for i in reporterDict.values():
        answer.append(len([x for x in i if x in bannedUser]))
    
    return answer