[Programmers] 신고 결과 받기

노아카프카·2022년 1월 31일
0

https://programmers.co.kr/learn/courses/30/lessons/92334

Before


from collections import defaultdict

def solution(id_list, report, k):
    answer = [0] * len(id_list)

    dic = defaultdict(list)
    count = defaultdict(int)
    for re in report:
        a, b = re.split(" ")
        if b not in dic[a]:
            dic[a].append(b)
            count[b] += 1
    
    for key in count.keys():
        if count[key] >= k:
            for i in range(len(id_list)):
                if id_list[i] in dic:
                    if key in dic[id_list[i]]:
                        answer[i] += 1
    
    return answer

다른 사람 코드를 보고나서 다시 보니, 너무 수치스러운 코드..
만약 다른사람이 이렇게 짜놓은 코드를 보면 싫을것 같다.
이 쉬운걸 이렇게 구구절절 짜놓다니 하고 말이다.
다시 한번 짜보자.

After


def solution(id_list, report, k):
    answer = [0] * len(id_list)
        
    dic = {x : 0 for x in id_list}
    
    report = list(set(report))
    
    for r in report:
        dic[r.split()[1]] += 1
        
    for r in report:
        if dic[r.split()[1]] >= k:
            answer[id_list.index(r.split()[0])] += 1
    
    return answer

  • 바뀐점
    1) 불필요한 a, b 변수 할당.
    2) 비효율적인 dictionary 생성 및 초기화 수정.
    3) set을 사용한 중복 문제 해결.

  • 느낀점
    dictionary는 사용을 어떻게 하느냐에 따라서 천지차이라는걸 느낌.
    더 익숙해지고, 간단명료한 방식을 사용하자.

0개의 댓글