-
[프로그래머스] 신고 결과 받기Engineering WIKI/Programmers 2022. 4. 1. 02:22
코딩테스트 연습 - 신고 결과 받기
문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의
programmers.co.kr
좋은 코드지만 시간 초과 남
def solution(id_list, reports, k): stop = [] answer = [0] * len(id_list) reports = set(reports) # {wono : [] } dicReports = {id: [] for id in id_list} # 딕셔너리에 value는 리스트 구조 for i in reports: report = i.split(' ') stop.append(report[1]) dicReports[report[0]].append(report[1]) stop = set([i for i in stop if stop.count(i) >= k]) for key, value in dicReports.items(): for s in stop: if s in value: answer[id_list.index(key)] += 1 return answer
두번째 방법
from collections import defaultdict def solution(id_list, report, k): answer = [0] * len(id_list) report = set(report) call_user_list = defaultdict(set) # 유저 A가 신고한 유저 목록(set) ben_user_list = defaultdict(int) # 유저 A가 신고당한 횟수(int) stop = [] for i in report: call_user, ben_user = i.rsplit() ben_user_list[ben_user] += 1 call_user_list[call_user].add(ben_user) if ben_user_list[ben_user] == k: stop.append(ben_user) for s in stop: for i in range(len(id_list)): if s in call_user_list[id_list[i]]: answer[i] += 1 return answer
다른 풀이
def solution(id_list, report, k): answer = [0] * len(id_list) reports = {x : 0 for x in id_list} for r in set(report): reports[r.split()[1]] += 1 for r in set(report): if reports[r.split()[1]] >= k: answer[id_list.index(r.split()[0])] += 1 return answer
'Engineering WIKI > Programmers' 카테고리의 다른 글
[프로그래머스] 소수 만들기 (0) 2022.04.01 [프로그래머스] 내적 (1) 2022.04.01 [프로그래머스] 음양 더하기 (1) 2022.04.01 [프로그래머스] 없는 숫자 더하기 (0) 2022.04.01 [프로그래머스] 크레인 인형뽑기 게임 (0) 2022.04.01 [프로그래머스] 키패드 누르기 (0) 2022.04.01 [프로그래머스] 숫자 문자열과 영단어 (0) 2022.04.01 [프로그래머스] 로또의 최고순위와 최저순위 (0) 2022.04.01