Programming/Coding Test

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

조상현 2022. 9. 26. 10:41

문제해결 프로그래밍 공부를 위해 2022 KAKAO BLIND RECRUITMENT 코딩 테스트 문제 리뷰를 진행하고자 합니다.

 

문제는 https://school.programmers.co.kr/learn/challenges?page=1&partIds=25448 에서 풀어볼 수 있습니다.

 

가장 먼저 풀어볼 문제는 32%의 정답률을 보이는 신고 결과 받기입니다.

 

 

문제 설명은 다음과 같습니다.

 

 

입출력 예시는 다음과 같습니다.

 

 

요약하자면 이용자A가 신고한 이용자B가 정지기준에 도달하면 이용자A의 카운트를 증가시키면 되는 간단한 문제입니다. 이 때 중복된 유저의 신고는 1회로 처리할 것.

 

바로 문제를 풀어보겠습니다. 변수는 이용자의 ID가 담긴 문자열 배열 id_list, 각 이용자가 신고한 이용자의 ID 정보가 담긴 문자열 배열 report, 정지 기준이 되는 신고 횟수 k가 제공됩니다.

 

def solution(id_list, report, k):
    answer = [0] * len(id_list)
    report_history = dict()
    for id in id_list:
        if id not in report_history.keys():
            report_history[id] = []

 

이용자별로 신고한 사람을 관리하기 위해 dict를 만들고 list 형태로 초기화 시켜줍니다.

 

for rep in report:
    reporter, reported = rep.split(' ')
    if reported not in report_history[reported]:
        report_history[reported].append(reporter)

 

그 후에 위와 같이 신고내용을 파싱해 신고한 이용자와 신고당한 이용자로 분리한 후 신고당한 유저의 기록에 신고한 이용자를 추가합니다.

for reported in report_history.keys():
    if len(report_history[reported]) >= k:
        for reporter in report_history[reported]:
            answer[id_list.index(reporter)] += 1

 

그 후 모든 이용자의 신고당한 기록을 확인하여 길이가(신고당한 횟수가) k 이상일 경우 해당 이용자를 신고한 이용자의 카운트를 1 증가시켜줍니다.

 

코드 전문은 다음과 같습니다.

 

def solution(id_list, report, k):
    answer = [0] * len(id_list)
    report_history = dict()
    for id in id_list:
        if id not in report_history.keys():
            report_history[id] = []
    
    for rep in report:
    reporter, reported = rep.split(' ')
    if reported not in report_history[reported]:
        report_history[reported].append(reporter)
            
    for reported in report_history.keys():
    if len(report_history[reported]) >= k:
        for reporter in report_history[reported]:
            answer[id_list.index(reporter)] += 1
        
    return answer

 

다음글에서는 주차 요금 계산 문제를 풀어보겠습니다.