카테고리 없음

[프로그래머스 / 파이썬 풀이] 신고 결과 받기

Hoo_Dev 2023. 1. 21. 18:29
def solution(id_list, report, k):
    
    # 신고자와 신고당한 사람을 기록
    report_list = {}
    # 해당 사람의 신고 횟수
    report_count = {}
    # 신고자에게 알리기 위해 카운팅을 하는 딕셔너리
    result_lst = {}
    
    for id in id_list:
        report_count[id] = 0
        result_lst[id] = 0
        
    for re in report:
        a = re.split(' ')
        
        # 신고자가 첫 신고이면 해당 키에 리스트로 넣어준다.
        # 신고당한 사람의 신고횟수도 카운트
        if a[0] not in report_list.keys():
            report_list[a[0]] = [a[1]]
            report_count[a[1]] += 1
        # 신고자가 첫 신고가 아니라면 만들어진 리스트에 append
        # 신고당한 사람의 신고횟수도 카운트
        elif a[1] not in report_list[a[0]]:
            report_list[a[0]].append(a[1])
            report_count[a[1]] += 1
                
    # 신고자의 신고목록 리스트를 순회하면서 신고당한 사람의 횟수를 result_lst에 저장
    for result in report_list.items():
        for check in result[1]:
            if check == []:
                break
            elif report_count[check] >= k:
                result_lst[result[0]] += 1
    
    # result_lst의 밸류 값을 리스트 형식으로 출력
    return [*result_lst.values()]

자칫하면 시간초과가 날 수 있는 문제.

처음에 중복 체크 또한 리스트로 만들어서 체크를 했는데 시간초과에 막혔다.

 

주의 깊게 봐야할 것은 한 사람이 같은 사람을 여러번 신고하면 한번으로 생각하기