https://programmers.co.kr/learn/courses/30/lessons/92334
풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
from collections import defaultdict
def solution(id_list, report, k):
answer = []
report_to_from = defaultdict(set) # key(id)를 신고한 목록
report_from_to = defaultdict(set) # key(id)가 신고한 목록
for r in report:
report_from, report_to = r.split(' ') # 공백을 기준으로 from/to 구분
report_to_from[report_to].add(report_from) # report_to를 신고한 목록에 from 추가
report_from_to[report_from].add(report_to) # report_from이 신고한 목록에 to 추가
for _id in id_list:
cnt = 0
for r_to in report_from_to[_id]: # _id가 신고한 목록에서 아이디를 가져옴(r_to)
if len(report_to_from[r_to]) >= k: # r_to 신고한 목록의 개수가 k 이상인 경우 cnt++
cnt += 1
answer.append(cnt)
return answer
|
cs |
우선 id가 신고한 목록을 저장할 dict와 id를 신고한 목록을 저장할 dict를 선언합니다. 같은 유저를 여러번 신고하는 경우 1번 신고한 것으로 처리되기 때문에 여러 번 신고한 것에 대해 중복을 없애기 set 자료형을 default value로 가지는 defaultdict로 선언합니다.
그리고 report 리스트에서 신고 목록을 가져와 split()함수를 이용하여 report_from(누구로부터) report_to(누구에게)로 구분하며, 각각 dict에 저장합니다.
마지막으로 id 리스트에서 id를 가져와 해당 id가 신고한 신고 목록을 확인합니다. (report_from_to), 그리고 해당 신고목록에서 신고당한 id를 가져와(r_to) 해당 id(r_to)를 신고한 목록의 개수를 확인합니다. 이 때 개수가 k개 이상인 경우 count를 증가시키며, 이 과정이 마무리되면 answer 리스트에 카운트를 추가합니다.
'About > Algorithm' 카테고리의 다른 글
[Programmers] 파괴되지 않은 건물 (Python 풀이) - 2022 KAKAO BLIND RECRUITMENT (9) | 2022.02.03 |
---|---|
[Programmers] 양과 늑대 (Python 풀이) - 2022 KAKAO BLIND RECRUITMENT (0) | 2022.01.28 |
[Programmers] 수식 최대화(Python 풀이) - 2020 카카오 인턴십 코딩테스트 문제 (0) | 2022.01.19 |
[백준 8972] 미친 아두이노(Python 풀이) (0) | 2022.01.16 |
[백준 20058] 마법사 상어와 파이어스톰(Python 풀이) (0) | 2022.01.10 |