본문 바로가기

~2023

[Python] 신고 결과 받기 - 2022 KAKAO BLIND RECRUITMENT

728x90
반응형

<문제 링크>

 

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

 

코딩테스트 연습 - 신고 결과 받기

문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의

programmers.co.kr

 


<풀이>

 

일정 횟수만큼 신고를 받아야 정지를 먹는다. (단, 동일한 인물이 중복 신고한 경우 1회로 처리함)

그래서 신고 정보가 있는 report에서 단순히 split한 다음에 누가 누구에게 신고를 했는지 횟수를 저장하면 된다.

저장된 횟수가 정지 먹을 만큼의 횟수라면 정지를 먹고 신고한 사람에게 당신의 신고자가 정지 먹었다는 걸 알려주기 위해 메일을 보낸다.

python의 fstring을 이용한다면 딕셔너리 저장 및 탐색이 편해 쉽게 풀 수 있는 문제이다.

def solution(id_list, report, k):
    answer = [0 for _ in range(len(id_list))]
    ID = dict()
    reported_count = dict()
    report_doc = dict()
    unavail_arr = []
    
    # ID 넘버, 유저 신고 횟수(reported_count), 신고한 사람(report_doc) 저장
    for i, id in enumerate(id_list, 0):
        ID[f"{id}"] = i
        reported_count[f"{id}"] = 0
        report_doc[f"{id}"] = []
    
    # report 결과 정리
    for s in report:
        er, ed = s.split() # 신고자, 신고 받은 자
        
        if not ed in report_doc[f"{er}"]:
            report_doc[f"{er}"].append(ed)
            reported_count[ed] += 1 
    
    # 정지자 판별
    for id, v in reported_count.items():
        if v >= k:
            unavail_arr.append(id)
    
    # 메일 발송
    for id, v in report_doc.items():
        for s in v:
            if s in unavail_arr:
                answer[ID[id]] += 1
                        
    return answer
728x90
반응형