코드
def solution(id_list, report, k):
answer = []
block_id = []
set_report = set(report) # 1
report_cnt = {id: 0 for id in id_list} # 2
mail_cnts = {id: 0 for id in id_list} # 3
for id in set_report: # 4
report_cnt[id.split()[1]] += 1
for i in report_cnt: # 5
if report_cnt.get(i) >= k:
block_id.append(i)
for i in set_report: # 6
if i.split()[1] in block_id:
mail_cnts[i.split()[0]] += 1
answer = list(mail_cnts.values()) # 7
return answer
풀이
#1: 동일한 유저에 대한 신고는 중복되지 않으므로, set 자료형을 사용하여 list의 중복을 제거한다.
#2: 유저에 대한 신고 횟수를 저장하는 딕셔너리를 생성한다.
#3: 신고한 유저가 받는 메일 개수를 저장하는 딕셔너리를 생성한다.
#4: report를 ' ' 기준으로 split하여, 신고받은 유저의 신고 횟수를 증가시킨다.
#5: 만약 신고당한 횟수가 k 이상이면, block된 id list에 추가한다.
#6: 다시 report list로 돌아가서 block된 id를 신고한 유저가 있으면, mail cnt를 증가시킨다.
#7: dict 자료형의 value를 list로 변환하여 answer를 리턴한다!
'👩🏻💻 Front-end > 👾 Algorithm' 카테고리의 다른 글
백준 11866 - 요세푸스 문제 (Python) (0) | 2022.05.27 |
---|---|
백준 1966 - 프린터 큐 (Python) (0) | 2022.05.25 |
백준 1316 - 그룹 단어 체커 (Python) (0) | 2022.05.21 |
퀵 정렬 Quick Sort (Python) (0) | 2022.05.21 |
백준 2751 - 정렬 (Python) (0) | 2022.05.20 |