코딩테스트/프로그래머스
[프로그래머스] 신고 결과 받기 - python
블랙곰
2022. 2. 6. 22:11
2022 KAKAO BLIND RECRUITMENT
Lv1. 해시 유형
문제설명
신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다.
- 각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다.
- 신고 횟수에 제한은 없습니다. 서로 다른 유저를 계속해서 신고할 수 있습니다.
- 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리됩니다.
- k번 이상 신고된 유저는 게시판 이용이 정지되며, 해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 발송합니다.
- 유저가 신고한 모든 내용을 취합하여 마지막에 한꺼번에 게시판 이용 정지를 시키면서 정지 메일을 발송합니다.
- return 하는 배열은 id_list에 담긴 id 순서대로 각 유저가 받은 결과 메일 수를 담으면 됩니다.
문제풀이
from collections import OrderedDict
import copy
def solution(id_list, report, k):
reported_ids = OrderedDict((x, []) for x in id_list)
mail_ids = copy.deepcopy(reported_ids)
for x in report:
x_sep = x.split(' ')
user_id = x_sep[0]
reported_id = x_sep[1]
if not user_id in reported_ids[reported_id]:
reported_ids[reported_id].append(user_id)
if len(reported_ids[reported_id]) == k:
for y in reported_ids[reported_id]:
mail_ids[y].append(reported_id)
elif len(reported_ids[reported_id]) > k:
mail_ids[user_id].append(reported_id)
return [len(x) for x in mail_ids.values()]
아래의 변수를 두고 문제를 풀이하면 된다.
reported_ids: 신고당한 아이디와 신고한 아이디 리스트 딕셔너리
mail_ids: 신고한 아이디와 정지된 아이디 리스트 딕셔너리
최적화 포인트
동일한 유저에 대한 신고 처리는 1회로 처리하고,
k번째 신고 당했을때와 그 이후 처리 방법을 조건문으로 풀이하면 된다.