본문 바로가기
코딩공부/프로그래머스 (python)

[프로그래머스] 신고 결과 받기 (Python)

by CodingKwon 2022. 3. 21.

문제 링크 (Level 1)

https://programmers.co.kr/learn/courses/30/lessons/92334?language=python3 

 

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

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

programmers.co.kr

 

나의 코드 (Python)

def solution(id_list, report, k):
    
    answer = [] # 결과
    reported_user = [] # 임시저장
    
    # 신고횟수, 신고당한사람
    dict_count = {name: 0 for name in id_list}
    dict_report = {name: [] for name in id_list}


    # 리포트 된 유저 처리
    for s in report:
        user, report_user = s.split()   # 신고유저, 신고당한유저
        if report_user not in dict_report[user]: # 신고당한 딕셔너리 목록에 없는 경우
            dict_report[user].append(report_user) # 신고당한 딕셔너리 목록에 없는 경우 추가


    # 신고 횟수 추가
    for i in id_list:
        for j in dict_report:
            if i in dict_report[j]:     # 신고당한유저에 있다?
                dict_count[i] += 1  # 카운팅 +1
        if dict_count[i] >= k:  # 정지횟수까지 온 경우
            reported_user.append(i) # 임시저장 배열에 추가


    # 결과에 담기
    for i in id_list:
        cnt = 0     # 카운팅 0
        for j in dict_report[i]:     # 신고당한 횟수만큼 반복
            if j in reported_user:  # 신고당한 사람이 정지된 임시목록에 있어야함
                cnt += 1    # 그 수만큼 카운팅
        answer.append(cnt)  # 신고당한횟수만큼 정답에 추가, 신고당한적없으면 0

    return answer

 

더 짧게 푸는 방법이 떠오르지 않아 하나씩 하는 방식으로 했습니다. 

먼저 신고당한 유저의 목록을 만들어줍니다.

다음으로 신고당한 유저가 몇 번 신고당했는지 카운팅 해서 정지당하는지 확인하고 정지당하면 정지 리스트에 추가

정지당한 목록에 있는 유저가 몇 번 신고당했는지 카운팅

 

 

 

댓글