Programing/자료구조, Algorithm
프로그래머스(programmers) 신고 결과 받기 -python-
r00t0k
2022. 3. 10. 20:24
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