문제 url: https://school.programmers.co.kr/learn/courses/30/lessons/92334
권장 시간: 80분
권장 시간 복잡도: O(N)
def solution(id_list, report, k):
answer = []
# dict = {신고 당한 사람 : 신고자}
dict = {}
# rptlist = {신고자 : 신고 당한 사람}
rptlist={}
# 딕셔너리 초기화
for i in id_list:
rptlist[i]=[]
# ex. rptlist = { "muzi": [] , "frodo": [], "apeach":[], "neo":[]}
# set로 초기화함으로써 한 유저의 여러 번 신고 중복 처리
dict[i]=set([])
# ex. rptlist = { "muzi": {} , "frodo": {}, "apeach":{}, "neo":{}}
for rep in report:
reporter, target = rep.split(" ")
rptlist[reporter].append(target)
dict[target].add(reporter)
# ex. dict = {
# 'muzi': {'apeach'},
# 'frodo': {'muzi', 'apeach'},
# 'apeach': {},
# 'neo': {'frodo', 'muzi'}
# }
# ex. rptlist = {
# 'muzi': ['frodo', 'neo'],
# 'frodo': ['neo'],
# 'apeach': ['frodo', 'muzi'],
# 'neo': []
# }
# 신고자 별로 반복
# 신고(중복 제외)한 만큼 이메일이 올 것이기 때문에
for user in rptlist.keys():
cnt = 0
for reported in dict.keys():
# 신고 당한 횟수가 k번 이상인 경우
# dict의 value가 k 이상인 경우, 해당 키 값은 정지된 유저이다.
if len(dict[reported])>=k:
# 정지된 유저가 유저 별 신고한 사람인 경우 카운트
if reported in rptlist[user]:
cnt+=1
answer.append(cnt)
return answer
'Algorithms > Hash' 카테고리의 다른 글
[Programmers] 전화번호 목록 - 해시 (0) | 2024.12.01 |
---|---|
[Programmers] 영어 끝말잇기 - 집합 (1) | 2024.11.30 |
[Programmers] 폰켓몬 - 집합 (0) | 2024.11.28 |
[Programmers] 메뉴 리뉴얼 (0) | 2024.08.18 |