-
92334. 신고 결과 받기(Python, Programmers Level 1)Programmers 2022. 9. 4. 00:05
풀이
게시판의 다른 유저를 신고하며, 신고한 유저가 정지되면 메일을 수신합니다.
report에는 중복이 존재할 수 있으나, 한 유저에 대한 신고는 1회만 유효하므로 report에서 중복을 제거해야 합니다.
가장 쉽게 중복을 제거하는 것은 set 자료형을 활용하는 것입니다.
report를 순회하며 신고당한 횟수를 누적하고,
다시 한 번 report를 순회하며 정지시킨 유저를 종합하여 이 결과를 반환합니다.
코드
report에서 중복을 제거합니다.
report = set(report)
신고당한 횟수를 누적합니다.
여기서는 신고한 유저가 누구인지는 중요하지 않습니다.
reported_counter = defaultdict(int) for r in report: _, reported_user = r.split() reported_counter[reported_user] += 1
자신의 신고로 정지당한 유저의 수를 종합합니다.
신고당한 횟수가 k회 이상이면 정지당한 유저입니다.
stop_counter = defaultdict(int) for r in report: report_user, reported_user = r.split() if k <= reported_counter[reported_user]: stop_counter[report_user] += 1
id_list를 기준으로 반환할 결과를 만듭니다.
answer = [] for user_id in id_list: answer.append(stop_counter[user_id])
더보기from collections import defaultdict def solution(id_list, report, k): report = set(report) reported_counter = defaultdict(int) for r in report: report_user, reported_user = r.split() reported_counter[reported_user] += 1 stop_counter = defaultdict(int) for r in report: report_user, reported_user = r.split() if k <= reported_counter[reported_user]: stop_counter[report_user] += 1 answer = [] for user_id in id_list: answer.append(stop_counter[user_id]) return answer if __name__ == '__main__': result = solution( ["muzi", "frodo", "apeach", "neo"], ["muzi frodo", "apeach frodo", "frodo neo", "muzi neo", "apeach muzi"], 2 ) print([2, 1, 1, 0] == result, result) result = solution( ["con", "ryan"], ["ryan con", "ryan con", "ryan con", "ryan con"], 3 ) print([0, 0] == result, result)
'Programmers' 카테고리의 다른 글
72410. 신규 아이디 추천(Python, Programmers Level 1) (0) 2022.09.04 77484. 로또의 최고 순위와 최저 순위(Python, Programmers Level 1) (0) 2022.09.04 86491. 최소직사각형(Python, Programmers Level 1) (0) 2022.09.04 12906. 같은 숫자는 싫어(Python, Programmers Level 1) (0) 2022.09.04 118666. 성격 유형 검사하기(Python, Programmers Level 1) (0) 2022.09.03