신고결과받기 _ Lv.1
2022. 9. 4. 19:13ㆍ2022/Programmers_Kakao 기출
카카오 코테도 풀어보려고 오늘 처음 해봤는데... 1레벨부터 힘들어한다...
회사다니면서 공부하는거 쉽지않은데 이대로 하다가는 죽도 밥도 안될거같은 이 너낌~
쨌든 아래는 내가 처음 생각나는대로 구현해본 코드 그렇지만 역시나 100점 만점에 20.8점...^&^
def solution(id_list, report, k):
answer = [0 for _ in range(len(id_list))]
reported_cnt = [0 for _ in range(len(id_list))]
reporter_list = [[] for _ in range(len(id_list))]
for rp in report:
rpList = rp.split(' ')
reporter = rpList[0]; reported_id = rpList[1]
reporter_idx = id_list.index(reporter)
reported_idx = id_list.index(reported_id)
reported_cnt[reported_idx] += 1
if reporter_idx not in reporter_list[reported_idx]:
reporter_list[reported_idx].append(reporter_idx)
for i in range(len(id_list)):
if reported_cnt[i] >= k:
for user in reporter_list[i]:
answer[user] += 1
return answer
그랬는데 엄청 어이없는 부분에서 내가 실수를 했다.
if reporter_idx not in reporter_list[reported_idx]:
reported_cnt[reported_idx] += 1
reporter_list[reported_idx].append(reporter_idx)
요부분이다. 기존의 것은 신고 받은 사람은 신고한 사람이 중복되는지 거치지 않고 무조건 +1을 해주니깐 통과를 못했던것... ㅎㅎㅎ 정신차리자!
프로그래머스는 같은 문제에 대한 유사한 풀이를 보여줘서 너무 좋다,,,
호우..그런데 최대한 효율적으로 짜둔 사람들의 코드를 보면서 오늘도 감탄했다.
아래는 최적화된 코드이다.
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
1. reports는 각 유저별 신고당한 횟수를 나타내는데, 동일한 유저가 2번이상 신고하지 못하기 때문에 set(report)로 중복을 제거해주었다. 이 부분을 생각했더라면 위와 같은 불상사는 안일어났을 것이다... ㅠ.ㅠ
2. 신고한 리스트들을 순서대로 보면서 신고당한 유저가 k번 이상 신고를 당했다면 메일 발송(answer)을 1 추가한다.
이번에 배운점이라면 새로운 변수를 만드는것 보다 기존의 것을 최대한 활용하여 구현하는 연습을 해야겠다는 생각을 하게되었다.
'2022 > Programmers_Kakao 기출' 카테고리의 다른 글
크레인 인형뽑기 게임 _ Lv.1 (0) | 2022.09.09 |
---|---|
성격 유형 검사하기 _ Lv.1 (0) | 2022.09.06 |
키패드 누르기 _ Lv.1 (0) | 2022.09.06 |
숫자 문자열과 영단어 _ Lv.1 (0) | 2022.09.05 |
신규 아이디 추천 _ Lv.1 (0) | 2022.09.04 |