728x90
<문제 링크>
https://programmers.co.kr/learn/courses/30/lessons/92334
<문제 풀이>
1. 답을 id_list 순서대로 적어야 하므로 id_list 개수만큼 [0] 추가
2. 한 유저가 같은 유저를 여러 번 신고한 경우는 신고 횟수 1회로 처리하기 때문에 set()으로 중복 제거
3. 신고한 유저를 딕셔너리-set()으로 선언 => 신고한 유저는 여러명일 필요가 없어서
4. 신고당한 유저를 딕셔너리-int()로 선언
5. 정지된 유저를 받을 변수 선언
6. report에서 신고당한 유저(오른쪽)에 +1
7. report에서 신고한 유저에 신고당한 유저 추가
8. 신고당한 횟수가 K번이면 정지된 유저에 유저명 추가
9. 신고한 유저 값에 정지된 유저가 있다면 해당하는 답 인덱스에 +1
<코드>
from collections import defaultdict
def solution(id_list, report, k):
answer = [0] * len(id_list)
report = set(report)
left_report = defaultdict(set)
right_report = defaultdict(int)
stopID = []
for r in report:
r1, r2 = r.split()
right_report[r2] += 1
left_report[r1].add(r2)
if right_report[r2] == k:
stopID.append(r2)
for s in stopID:
for i in range(len(id_list)):
if s in left_report[id_list[i]]:
answer[i] += 1
return answer
<고쳐야 할 점>
- from collections import defaultdict 익히기
- 복습 알고리즘
'두두의 알고리즘 > 문제' 카테고리의 다른 글
[DFS] 난이도1.5, 이취코 149p '음료수 얼려 먹기' (Python) (0) | 2022.03.23 |
---|---|
[탐욕법] 난이도1, K 대회 기출 '만들 수 없는 금액' (Python) (0) | 2022.03.21 |
[탐욕법] 프로그래머스 L1 '신규 아이디 추천' (Python) (0) | 2022.03.20 |
[기타] 프로그래머스 L1 '키패드 누르기' (Python) (0) | 2022.03.20 |
[진법 변환] 프로그래머스 L1 '3진법 뒤집기' (Python) (0) | 2022.03.20 |