Moe's Tech Blog
[알고리즘] 프로그래머스의 신고결과 받기 문제를 풀으며 본문
- 오늘 필자는 프로그래머스의 ‘신고 결과 받기’ 문재를 풀었다
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이 많아 질수록 이해하기 어렵다
- 가능하면은 파이썬 라이브러리에서 제공하는 메쏘드와 함수를 사용해 간결하고 읽기 쉽게 만들자
'Algorithms > Journal' 카테고리의 다른 글
[알고리즘] 프로그래머스의 체육복 문제를 풀으며 (0) | 2022.04.18 |
---|---|
[알고리즘] 프로그래머스의 "예산" 문제를 Javascript로 풀으며 (0) | 2022.03.21 |
[알고리즘] 프로그래머스의 '신규 아이디 추천' 문제를 풀으며 (0) | 2022.02.28 |