728x90
https://programmers.co.kr/learn/courses/30/lessons/92334
코딩테스트 연습 - 신고 결과 받기
문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의
programmers.co.kr
첫 번째 코드
from collections import defaultdict
def solution(id_list, report, k):
dict_report = defaultdict(list)
count_report = defaultdict(int)
check = []
id_dict = {x:0 for x in id_list}
for line in report:
if line in check:
continue
check.append(line)
user, user_ = line.split(" ")
count_report[user_] += 1
dict_report[user].append(user_)
for user_id , report_num in count_report.items():
if report_num >= k:
for key,value in dict_report.items():
if user_id in value:
id_dict[key] += 1
return list(id_dict.values())
테스트 케이스 성공, 제출 시 케이스 6개에 대해서 시간초과 있음
-중복을 없애기 위해 check 하는 리스트 생성
해결 방법
-처음에는 이중 for문이 문제라고 생각했지만 이중 for문이 아니면 도저히 답 도출이 안 됨.
-생각해보니 모든걸 dictionary로 처리하고 나중에 리스트로 cast해서 return만 해주는 것이라면 check가 리스트일 필요 없고 set 함수로 확인하는 line의 순서가 바뀌어도 된다고 생각
정답 코드
from collections import defaultdict
def solution(id_list, report, k):
dict_report = defaultdict(list)
count_report = defaultdict(int)
id_dict = {x:0 for x in id_list}
for line in set(report):
user, user_ = line.split(" ")
count_report[user_] += 1
dict_report[user].append(user_)
for user_id , report_num in count_report.items():
if report_num >= k:
for key,value in dict_report.items():
if user_id in value:
id_dict[key] += 1
return list(id_dict.values())
!포인트
- key,value 값을 찾고자 할 때는 하나하나 순회하는 리스트보다 바로 key에 대한 value 값을 찾는 dictionary가 훨씬 빠름
'Python > CoTe' 카테고리의 다른 글
[programmers] 키패드 누르기 (0) | 2022.03.03 |
---|---|
[programmers] 3진법 뒤집기 (0) | 2022.03.03 |
[programmers] 최대공약수와 최소공배수 (0) | 2022.02.26 |
[programmers] 나누어 떨어지는 숫자 배열 (0) | 2022.02.26 |
[programmers] 이상한 문자 만들기 (0) | 2022.02.26 |