728x90
import collections
def solution(id_list, report, k):
answer = [0 for x in range(len(id_list))]
user = collections.defaultdict(set)
for r in report:
tmp = r.split()
reporter = tmp[0]
reported = tmp[1]
user[reported].add(reporter)
for u in user.keys():
if len(user[u]) >= k:
for s in list(user[u]):
answer[id_list.index(s)] += 1
return answer
<내 풀이 분석>
1. answer에 id_list의 길이(유저 수)만큼 0을 채워준다. // 반환할 때 인덱스를 위해
2. user는 {"신고당한 사람": {"신고한 사람1", "신고한 사람2", ...}} 과 같이 구성된 딕셔너리이다. 같은 사람을 두 번 신고할 수 없도록 set(집합)자료구조로 만들어주었다.
3. for문으로 report를 하나씩 빼서 split()으로 신고한 사람, 신고당한 사람을 나눠준다. 그리고 user[신고당한사람]이라는 집합에 신고한 사람을 추가한다.
4. user를 돌면서 해당 집합에 k명 이상이 존재하면 정지 => 집합에 포함된 사람들에 해당하는 answer의 인덱스를 1 증가시켜준다.
728x90
'알고리즘 > programmers[1]' 카테고리의 다른 글
[프로그래머스] [1차] 다트 게임: python3 (0) | 2022.01.16 |
---|---|
[프로그래머스] 하샤드 수: python3 (0) | 2022.01.16 |
[프로그래머스] 내적 (0) | 2022.01.10 |
[프로그래머스] 음양 더하기 (0) | 2022.01.10 |
[프로그래머스] 없는 숫자 더하기 다른 풀이 (0) | 2022.01.10 |