Python/Algorithm

[프로그래머스] 신고 결과 받기 - Python

언킴 2023. 8. 24. 23:03
반응형

해당 문제는 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에 저장하면 된다.