카카오 블라인드 2021 - 신규 아이디 추천
문제 Comment
카카오 블라인드 2022 코딩 테스트 문제가 프로그래머스에 공개되었습니다.
합격 커트라인은 4.5솔이었다고 알려져있습니다. 아마 1~4번 문제를 풀고 6번 문제의 정확성 테스트 통과가 합격 커트로 판단됩니다.
저도 작년에 코테에 참여를 했는데 1~3번 + 6번 0.5를 했는데 4번 문제가 풀이를 진행한 방법과 다르게 일부 테케에서 틀렸다고 나와서 아쉽게 3.5솔을 한 기억이 있네요.
어쨌든 1번 문제부터 차근차근 알아봅시다.
문자열을 다루고 있는 문제인만큼 파괴력이 쎈 파이썬을 활용했습니다.
문제 풀이
1번 문제는 항상 그렇게 어렵지는 않습니다. 이번 문제는 무지성 2중포문을 작성하면 id_list
가 1000, report
가 200000이라 시간초과가 날 위험이 높습니다.
어차피
id_list
에 주어진 유저로만 ban list가 생성될 것이기 때문에 각 유저가 몇번의 신고를 받는지를 기록하고 탐색을 진행하며 k이상에 해당하는 유저만으로 구성된 리스트를 생성했습니다.이후 각 유저들이 신고한 유저의 리스트를 파악하고 밴목록에 올라간 유저만큼 카운팅을 진행하면 됩니다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
def solution(id_list, report, k):
answer = []
user_list = {}
banned_list = {}
for _id in id_list:
user_list[_id] = []
banned_list[_id] = 0
for rep in report:
user1 = rep.split()[0]
user2 = rep.split()[1]
if user2 not in user_list[user1]:
banned_list[user2] += 1
user_list[user1].append(user2)
ban_list = []
for id, count in banned_list.items():
if count >= k:
ban_list.append(id)
for id, lists in user_list.items():
cnt = 0
for ban in ban_list:
if ban in lists:
cnt += 1
answer.append(cnt)
return answer
사실 시간적으로는 결국 2중 포문을 활용해서 문제가 발생할 위험이 높습니다.
트리를 활용한 방식을 사용하면 탐색 시간을 좀 더 줄일 수 있지 않을까 생각합니다.
Comments powered by Disqus.