Moe's Tech Blog

[알고리즘] 프로그래머스의 신고결과 받기 문제를 풀으며 본문

Algorithms/Journal

[알고리즘] 프로그래머스의 신고결과 받기 문제를 풀으며

moe12825 2022. 2. 26. 12:07
def solution(id_list, report, k):
    answer = []
    report_count = {i: 0 for i in id_list}
    report_details = {i: set() for i in id_list}
    stopped_ids = set()

    # 리포트 상세 정보 생성
    for item in report:
        item = item.split()
        report_by, report_to = item[0], item[1]

        if report_to in report_details[report_by]:
            continue

        report_count[report_to] += 1
        report_details[report_by].add(report_to)

    # 유저 정지 정보 생성
    for user_id, count in report_count.items():
        if count >= k:
            stopped_ids.add(user_id)

    # 리포트 상세 정보와 유저 정지 정보로 return 값 생성
    for user_id in id_list:
        stopped_id_count = sum([1 if x in stopped_ids else 0 for x in report_details[user_id]])
        answer.append(stopped_id_count)

    return answer

 

잘했던점

  • 간결하게 쓰고 이해하려고 노력했던 점이 좋았다
  • 간략한 코멘트는 나중에 review할때 이 부분은 무엇을 위해 썼는지 도움을 주었다

 

아쉬웠던점

  • 문제를 이해하고 쓰고 재출하는데 여전히 40분 넘게 걸렸다 
    •  
    • 가장 많이 걸린시간은 코드를 쓰고 필자의 코드가 논리적으로 잘 짜였는지 생각했을때였다
    • 이때 필자의 코드는 많은 for loop와 if loop 그리고 variable을 써 읽기 어려웠다
  • 필자가 잘했는지 못했는지는 여전히 submit버튼을 누르고 난 후에야 알았다 
    • 만약 면접상황이나 아니면은 회사에서 일할때 필자가 잘했는지 못했는지 알 수 있을까?

 

배운점들

  • dictionary를 list comprehension 처럼 사용해 initialize를 할 수 있다
{i: 0 for i in id_list}
  • 어떻게 유닛 테스팅을 하면은 대부분의 case들을 cover 할 수 있는지 알면 더 좋을것 같다
  • 프로그램안에 있는 for loop과 if loop이 많아 질수록 이해하기 어렵다
    • 가능하면은 파이썬 라이브러리에서 제공하는 메쏘드와 함수를 사용해 간결하고 읽기 쉽게 만들자