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
'코테 공부 > 프로그래머스' 카테고리의 다른 글
[Python/완전탐색] 카펫 (0) | 2022.08.02 |
---|---|
[Python] 행렬의 덧셈 (0) | 2022.08.02 |
[Python] 가장 큰 수(어려웠음) (0) | 2021.08.09 |
[Python] 정렬/k번째 수 (0) | 2021.08.06 |
[Python/해시] 완주하지 못한 선수 (0) | 2021.08.05 |