코테 공부/프로그래머스
[Python] 신고 결과 받기
prefer_all
2022. 6. 21. 12:39
https://programmers.co.kr/learn/courses/30/lessons/92334
핵심) 1. 유저가 어떤 사람을 신고했는지 2. 유저가 몇 번 신고를 당했는지
- Dictionary를 사용. (매칭되는 두 가지 값을 한 번에 저장하고 싶을 때)
- 첫번째 dictionary는 유저별 신고id를 저장.
- 두번째 dictionary는 유저별 신고당한 횟수를 저장
아이디어) 중복 신고 제거 -> set 사용
def solution(id_list, report,k):
answer = []
report = list(set(report)) # 중복 신고 제거
user = defaultdict(set) # user별 신고한 id 저장
cnt = defaultdict(int) # user별 신고당한 횟수 저장
for r in report:
# report의 첫번째 값은 신고자id, 두번째 값은 신고당한 id
a,b = r.split()
# 신고자가 신고한 id 추가
user[a].add(b)
# 신고당한 id의 신고 횟수 추가
cnt[b] += 1
for i in id_list:
result = 0
# user가 신고한 id가 k번 이상 신고 당했으면, 받을 메일 추가
for u in user[i]:
if cnt[u]>=k:
result +=1
answer.append(result)
return answer
from collections import defaultdict
def solution(id_list, report, k):
answer = []
report_to_from = defaultdict(set) # key(id)를 신고한 목록
report_from_to = defaultdict(set) # key(id)가 신고한 목록
for r in report:
report_from, report_to = r.split(' ') # 공백을 기준으로 from/to 구분
report_to_from[report_to].add(report_from) # report_to를 신고한 목록에 from 추가
report_from_to[report_from].add(report_to) # report_from이 신고한 목록에 to 추가
for _id in id_list:
cnt = 0
for r_to in report_from_to[_id]: # _id가 신고한 목록에서 아이디를 가져옴(r_to)
if len(report_to_from[r_to]) >= k: # r_to 신고한 목록의 개수가 k 이상인 경우 cnt++
cnt += 1
answer.append(cnt)
return answer