본문 바로가기
알고리즘/코딩테스트 문제풀이

[2022 KAKAO BLIND] 신고결과 받기 / 사용언어 : 파이썬(python)

by 바른 호랑이 2022. 4. 24.
728x90
반응형

※ 문제링크

 

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

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

programmers.co.kr

해당 문제는 반복문에 대한 이해와 배열의 인덱스를 활용할 수 있으면 쉽게해결할 수 있는 문제였다. 시간을 절약하기 위해서는 배열의요소들을 호출하고 결과값을 확인할때 정확한 인덱스 값을 이용하여 호출하는 과정이 필요하다 판단했기 때문에 신고를 당한 횟수를 확인할 리스트와 신고를 한 사람의 인덱스번호를 저장할 리스트를 생성하여 문제를 해결하였다. 또한 한명의 사람이 동일한 사람을 여러번 신고해도 1번의 신고로 취급한다라는 조건이 있었기 때문에 중복제거를 위해 set 자료형을 활용하였다. 자세한 문제풀이방법과 코드는 아래와 같다.

1. report 리스트(신고와 관련된 세부내용이 담긴 배열)를 set자료형변환을 통해 중복제거를 해준다.

2. 각각의 id_list 요소들이 신고당한 횟수와 신고를 한 요소들을 저장할 리스트 2개를 생성해준다.

3. 반복문과 index함수를 활용하여 각각의 사람들이 신고당한 횟수와 신고를 한 리스트를 갱신해준다.

4. 갱신 완료후 2중 반복문을 활용하여 각각의 사람들이 자신이 신고한 사람들의 신고횟수를 체크하여 조건 충족시 해당 사람의 처리결과 수를 갱신해주고, answer 리스트에 결과값을 차례로 추가해준다.

5. 모든 반복문이 종료된 이후 결과값을 return 해준다.

 

# 샘플 1
id_list = ["muzi", "frodo", "apeach", "neo"]
report = ["muzi frodo","apeach frodo","frodo neo","muzi neo","apeach muzi"]
k = 2

# 샘플 2
id_list = ["con", "ryan"]
report = ["ryan con", "ryan con", "ryan con", "ryan con"]
k = 3

def solution(id_list, report, k):
    report = list(set(report))
    cp_list1 = [0 for _ in range(len(id_list))] # 각각의 사람들이 신고당한 횟수를 기록할 리스트
    cp_list2 = [[] for _ in range(len(id_list))] # 각각의 사람들이 신고한 사람들을 기록할 리스트
    answer = []
    for arr1 in report: # 신고당한 횟수와 신고한 사람들 리스트 갱신
        p1, p2 = arr1.split()
        cp_list2[id_list.index(p1)].append(id_list.index(p2))
        cp_list1[id_list.index(p2)] += 1
    for arr2 in cp_list2: # 신고한 사람들 리스트에서 처리되는 사람들의 수를 체크
        cnt = 0
        for number in arr2:
            if cp_list1[number] >= k:
                cnt += 1
        answer.append(cnt)   
    return answer
solution(id_list, report, k)

 

P.S 더 나은 개발자가 되기위해 공부중입니다. 잘못된 부분을 댓글로 남겨주시면 학습하는데 큰 도움이 될 거 같습니다.

728x90
반응형

댓글