ALGORITHM

프로그래머스 | 2022 KAKAO BLIND RECRUITMENT | 신고 결과 받기 (Python)

진미 2024. 9. 21. 20:52
 

프로그래머스

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

programmers.co.kr

 

내 코드

def solution(id_list, report, k):
    # 각 유저의 신고 결과를 저장할 리스트 (메일 받은 횟수)
    answer = [0] * len(id_list)
    
    # 각 ID별로 신고당한 횟수를 카운트
    reported_by_ID = [0] * len(id_list)
    
    # 유저 ID를 노드로 가지는 가중치가 없는 단방향 그래프
    # 인접 리스트를 중복 없이 처리하기 위해 set 사용
    report_dict = {reporter: set() for reporter in id_list}
    
    # ID를 인덱스로 접근하기 위해 ID와 인덱스 매핑
    id_to_index = {user: i for i, user in enumerate(id_list)}
    
    # 신고 처리
    for r in report:
        reporter, reported = r.split()
        report_dict[reporter].add(reported)
            
    # 신고 당한 횟수 카운트
    for reported_set in report_dict.values():
        for reported in reported_set:  
            reported_by_ID[id_to_index[reported]] += 1
    
    # 정지당한 리스트
    banned_list = [i for i, count in enumerate(reported_by_ID) if count >= k]
    
    # 딕셔너리를 돌면서 신고된 유저를 신고했으면 answer에 +1
    for reporter, reported_set in report_dict.items():
        for reported in reported_set:
            if id_to_index[reported] in banned_list:
                answer[id_to_index[reporter]] += 1
        
    return answer

 

enumerate를 적극 활용해보았다

헷갈려 죽겠네

 

반응형