반응형
해당 문제는 2022 KAKAO BLIND RECRUITMENT 에서 출제된 문제다.
마지막 출력되는 값은 유저가 신고한 유저 중 몇 명이 정지 되었는지에 대한 값을 반환한다. 한 유저가 동일한 유저에게 여러번 신고한 경우에는 모두 한 번으로 처리하고, K개의 임계값(Threshold)이 주어진다.
def solution(id_list, report, k):
froud_by = dict({key:[] for key in id_list})
counts = dict({key:0 for key in id_list})
idx_info = dict({key:i for i, key in enumerate(id_list)})
answers = [0] * len(id_list)
for val in report:
src, dst = val.split()
if dst in froud_by[src]:
continue
counts[dst] += 1
froud_by[src].append(dst)
for f, num in counts.items():
if num >= k:
for u_id, f_id in froud_by.items():
if f in f_id:
answers[idx_info[u_id]] += 1
return answers
코드는 간단하게 먼저 신고 받은 유저에 대한 딕셔너리를 생성한다. froud_by 는 key 값의 유저가 누구한테 신고를 받았는지에 대한 정보를 담고 있으며, counts는 몇 번 신고를 받았는지, idx_info는 이후 index를 가져오기 편하게 하기 위해 만든 딕셔너리다.
처음 report를 받아서 신고 받았다면, 1을 더하고 신고한 유저를 딕셔너리에 저장한다. 위 과정을 반복한 후, 신고당한 유저가 K개 이상의 신고를 받은 경우 신고한 유저에 1을 더해주고 answers에 저장하면 된다.
'Python > Algorithm' 카테고리의 다른 글
[프로그래머스] 뒤에 있는 큰 수 찾기 - Python (0) | 2023.08.27 |
---|---|
[프로그래머스] 주차 요금 계산 - Python (0) | 2023.08.25 |
[프로그래머스] 크레인 인형뽑기 게임 - Python (0) | 2023.08.24 |
[프로그래머스] 키패드 누르기 - Python (0) | 2023.08.24 |
[프로그래머스] 성격 유형 검사 - Python (2) | 2023.08.24 |