프로그래머스(programmers) 신고 결과 받기 -python-

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

 

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유