[Programmers] level 1 - 신고 결과 받기 (2022 KAKAO BLIND RECRUITMENT)
👩🏻💻 문제
문제가 이해는 갔는데 어떤 식으로 짜야 효율적인지 생각하는 게 어려웠다... 아직도 파이썬으로 문제 푸는 것에 익숙하지 않은가
👩🏻💻 정답 코드
def solution(id_list, report, k):
reported = [[]*len(id_list) for _ in range(len(id_list))]
report.sort()
for i in range(len(report)):
a, b = report[i].split()
if report[i] != report[i-1]:
reported[id_list.index(b)].append(id_list.index(a))
answer = [0]*len(id_list)
for i in reported:
if len(i) >= k:
for j in i:
answer[j] += 1
return answer
내가 처음 짠 코드는 위와 같았다. 하지만 테스트 22, 23에서 계속 실패 ㅠㅠ 내 생각에는 신고가 한 개가 들어왔을 때를 처리를 안 해서 그런 것 같다. 또 다른 문제가 있었겠지...
반복문도 너무 많고 해서 찾아보다가 집합을 활용한 풀이를 봤다.
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
reports
를 {'prodo': 0, 'apeach': 0...}
이런 식으로 초기화한다. 그리고 중복을 없애기 위해 set()
안에 report
를 넣어 집합으로 처리했다.
첫번째 for문
에서 reports
내 신고 당한 사람의 value
를 하나씩 높여 줬다. 그 다음 for문에서는 이미 set(report)
을 한 바퀴 돌고 똑같이 한 번 더 돌면서 신고 받은 사람의 그동안 쌓인 신고가 k개 이상인 경우 이 사람을 신고한 사람의 index
를 answer
에서 증가시켜준다.
👩🏻💻 Remember
중복 제거는 집합으로
저장까지 굳이 인덱스로 하려고 하지 않아도 됨. 어차피 이름 중복 없으니까 코드만 길어진다. 그리고 다양한 데이터 자료형을 활용하자.
Author And Source
이 문제에 관하여([Programmers] level 1 - 신고 결과 받기 (2022 KAKAO BLIND RECRUITMENT)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dazzlynn/Programmers-level-1-신고-결과-받기-2022-KAKAO-BLIND-RECRUITMENT저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)