문제출처 : 프로그래머스
문제소개
- 게시판 불량이용자로 k번 이상 신고되면 이용정지됨
- 신고한 사람에게 처리결과를 통보하는 시스템을 작성하시오.
- 한 유저가 동일 유저를 여러번 신고하면 1회로 처리됨.
- 유저가 신고한 모드 내용을 취함하여 한꺼번에 이용정지 처리하고 결과 메일을 발송함.
입출력 예시
- id_list: 유저목록
- report : "신고한사람 신고받은사람" 으로 구성
- k번 신고당하면 이용정지
- result : 유저별 처리결과 메일 받는 횟수
**이 문제에서 정답(answer)으로 반환되는 리스트**

코드
from collections import defaultdict
def solution(id_list, report, k):
answer = []
report_accept = defaultdict(set)
report_throw = defaultdict(set)
for r in report:
throw, accept = r.split(' ')
report_accept[accept].add(throw)
report_throw[throw].add(accept)
for _id in id_list:
cnt = 0
for r_throw in report_throw[_id]:
if len(report_accept[r_throw]) >= k:
cnt += 1
answer.append(cnt)
return answer
리팩토링
def solution(id_list, report, k):
answer = [0] * len(id_list)
accept_count = {x : 0 for x in id_list}
for r in set(report):
accept_count[r.split()[1]] += 1
for r in set(report):
if accept_count[r.split()[1]] >= k:
answer[id_list.index(r.split()[0])] += 1
return answer
정의된 변수 확인
id_list = ["muzi", "frodo", "apeach", "neo"]
accept_count = {x : 0 for x in id_list}
accept_count
{'muzi': 0, 'frodo': 0, 'apeach': 0, 'neo': 0}