알고리즘 스터디를 진행하며 문제를 풀다가,
split()의 문법을 다시 한 번 숙지하고자 오랜만에 포스팅을 하게 되었다..!
신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다.
자세한 문제 예시는 여기서 보세욥 😉
내 코드는 이렇다.
def solution(id_list, report, k):
answer = []
result = {id : [0,set()] for id in id_list}
for rpt in report:
who, whom = rpt.split()
if whom not in result[who][1]:
result[who][1].add(whom)
result[whom][0] += 1
for id in id_list:
cnt = 0
for p in result[id][1]:
if result[p][0] >= k:
cnt += 1
answer.append(cnt)
return answer
result 딕셔너리 = {사용자1 : [신고받은 횟수, set(신고한 사람들)], 사용자 2 : ....}
이렇게 딕셔너리 구조를 생각하고, report를 돌면서 정보를 위치에 맞게 저장했다.
그리고 나서
사실 근데 처음부터 report안의 원소를 원소.split()으로 활용하고 싶었는데.. 잘 안되고 에러가 났다 ㅠㅠ...
그런데 풀고 다른사람의 풀이를 보니 넘나 깔끔하게 split을 활용하셔서...
이걸 기억하고 다음에 꼭 틀리지 않고 써먹기 위해 기록한다 !
그 ✨멋지구리한 코드✨는 이렇다...!
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
정말 아름다운 코드... 프로그래머스는 정말 보면서 배우는게많다...
어쨌든..! set을 일일히 만들어서 딕셔너리 안에 넣 필요가 없었다..!
이렇게 하고 싶었는데.... 나도 생각했는데... (아쉽)
이번엔 못 짰지만, 다음엔 짤 수 있기를..!
아직도 기본적인 문법 에러가 날 때 마다 정말 내 자신이... 화난다...
언제쯤 Invalid Syntax를 안 볼 수 있는 것인가...