from collections import defaultdict
def solution(id_list, report, k):
report = set(report)
answer = []
mails = defaultdict(int) # 메일 받을 개수 딕셔너리
users = defaultdict(int) # 유저 초기화
for u in id_list:
mails[u]
users[u]
reports = defaultdict(list) # 신고 한 사람 저장
for r in report:
a, b = r.split()
reports[b].append(a)
for i in users: # 신고 당한 횟수 지정
users[i] = len(reports[i])
pass
for user in users: # "신고가 k번 이상인 유저"를 신고한 사람들의 메일 받을 횟수 초기화
if users[user] >= k: # k보다 많이 신고 당했으면
for c in reports[user]:
mails[c] += 1
for ans in mails:
answer.append(mails[ans])
return answer
나는 defaultdict을 이용하여 차례대로 처리구현 하였다.
이렇게 짜다보니 변수도 많이 필요하게 되고 머리속으로 조금이라도 다른생각 하게되면 딕셔너리, 변수 등이 헷갈려서 은근 시간이 오래걸렸다. (dict도많고 키, 벨류 관리 부터 다 생각하면서 해야함)
다른사람의 코드를 보니 최소한의 변수를 선언하고 한번에 계산하여 처리하였다. 실행흐름 자체는 내코드가 더 보기 쉬울지 몰라도
코드가 더 깔끔하고 헷갈릴염려가 없는 코드 였다 .
def solution(id_list, report, k):
answer = [0] * len(id_list)
reports = {x : 0 for x in id_list}
for r in set(report):
reports[r.split()[1]] += 1
for r in set(report):
if reports[r.split()[1]] >= k:
answer[id_list.index(r.split()[0])] += 1
return answer
'Programing > 자료구조, Algorithm' 카테고리의 다른 글
programmers 추석트래픽 [python] (0) | 2022.03.15 |
---|---|
programmers -프렌즈4블록- (python) (0) | 2022.03.14 |
백준 1700 반례 (python) (0) | 2022.02.17 |
백준 1062 (python) (0) | 2022.02.16 |
비트 마스크, 비트 마스킹(Bit-Masking)이란? (비트 마스크 알고리즘, 비트 마스킹 알고리즘) (0) | 2022.02.16 |