[PROG] 92334 신고 결과 받기(defaultdict)

호호빵·2022년 8월 18일
0

Algorithm

목록 보기
9/46

문제

id_list								report	                        k	result
["muzi", "frodo", "apeach", "neo"]	["muzi frodo","apeach frodo",	2	[2,1,1,0]
									 "frodo neo","muzi neo",
                                     "apeach muzi"]	
["con", "ryan"]						["ryan con", "ryan con", 		3	[0,0]
									"ryan con", "ryan con"]	

나의 해결

1. user와 cnt에 각각 유저별 신고한 id와 신고 당한 횟수를 dict 형태로 저장 
2. id_list에 있는 아이디 중 user의 id와 같은 것에 신고 당한 횟수가 k 번을 넘어가면 result +1
3. result 수만큼 신고 결과 이메일을 받게 됨
from collections import defaultdict

def solution(id_list, report, k):
    answer = []
    report = list(set(report))   # 신고 결과를 중복 없이
    user = defaultdict(set)      # 유저별 신고한 id 저장, 중복 안되게 set
    cnt = defaultdict(int)       # 신고 당한 횟수

    for r in report:
        a,b = r.split()
        user[a].add(b)
        cnt[b] += 1             # key의 값이 기본적으로 int 0이 되어있기 때문에 바로 +1 가능

    for id in id_list:          # muzi : {neo, frodo}  2번 신고함
        result = 0
        for u in user[id]:      # neo           # frodo
            if cnt[u] >= k:     # cnt[neo] = 2  # 2
                result += 1
        answer.append(result)   # 1 추가         # 1추가    -> 2추가
    return answer


print(solution(["muzi"], ["muzi frodo"], 2))
print(solution(["muzi", "frodo", "apeach", "neo"], ["muzi frodo","apeach frodo","frodo neo","muzi neo","apeach muzi"], 2))

# [0]
# [2, 1, 1, 0]

다른 풀이

defaultdict()

profile
하루에 한 개념씩

0개의 댓글