본문 바로가기
프로그래머스/lv.1

신고 결과 받기

by bingual 2024. 1. 31.
반응형

 

https://school.programmers.co.kr/learn/courses/30/lessons/92334

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제풀이

해시를 사용하지 않을 경우 신고 처리를 하는 로직에서 시간 복잡도는 O(n^2) 이상으로 올라가게 되어 시간 초과가 날거다.

from collections import defaultdict


def solution(id_list, report, k):
    # 신고/정지 명단
    users = {id: {"target": set(), "banned_cnt": 0} for id in id_list}
    report_cnt = defaultdict(int)  # 신고당한 횟수

    # 신고 처리
    for item in report:
        reporter, target = item.split()
        # 명단에 피신고자가 없을 경우 추가하고 신고당한 횟수 카운트
        if target not in users[reporter]["target"]:
            users[reporter]["target"].add(target)
            report_cnt[target] += 1

    # 처리 결과 메일통보
    for user, cnt in report_cnt.items():
        if cnt >= k:
            # 정지 처리한 피신고자인 만큼 카운트
            for reporter, target in users.items():
                if user in target["target"]:
                    users[reporter]["banned_cnt"] += 1

    # 각 유저가 처리 결과 메일을 받은 횟수 반환
    answer = [user["banned_cnt"] for user in users.values()]
    return answer

'프로그래머스 > lv.1' 카테고리의 다른 글

가장 많이 받은 선물  (0) 2024.02.01
[PCCP 기출문제] 1번 / 붕대 감기  (0) 2024.01.31
개인정보 수집 유효기간  (0) 2024.01.30
[PCCE 기출문제] 10번 / 데이터 분석  (0) 2024.01.30
성격 유형 검사하기  (0) 2024.01.30