카카오 - 신고 결과 받기

문제출처 : 프로그래머스

문제소개

- 게시판 불량이용자로 k번 이상 신고되면 이용정지됨 
- 신고한 사람에게 처리결과를 통보하는 시스템을 작성하시오.
- 한 유저가 동일 유저를 여러번 신고하면 1회로 처리됨. 
- 유저가 신고한 모드 내용을 취함하여 한꺼번에 이용정지 처리하고 결과 메일을 발송함.

입출력 예시

- id_list: 유저목록 
- report : "신고한사람 신고받은사람" 으로 구성 
- k번 신고당하면 이용정지
- result : 유저별 처리결과 메일 받는 횟수
  **이 문제에서 정답(answer)으로 반환되는 리스트**

코드

# 각 유저별 처리결과 메일을 받은 횟수를 배열에 담는 함수 작성

from collections import defaultdict
# 디폴트 값을 지정해줄수 있는 defaultdict
# 키(id)의 개수를 세거나 리스트나 셋의 항목을 정리할 때 활용됨

def solution(id_list, report, k):
    answer = []
    report_accept = defaultdict(set)  # id가 신고받은 목록 (set 중복제거)
    report_throw = defaultdict(set)  # id가 신고한 목록

    for r in report:
        throw, accept = r.split(' ')  # 신고한 사람, 받은사람
        report_accept[accept].add(throw)  # accept가 신고받은 목록에 throw 추가
        report_throw[throw].add(accept)  # throw가 신고한 목록에 accept 추가

    for _id in id_list:
        cnt = 0
        for r_throw in report_throw[_id]:  # _id가 신고한 아이디를 가져옴(r_throw)
            if len(report_accept[r_throw]) >= k:
                cnt += 1
        answer.append(cnt)
    return answer

리팩토링

def solution(id_list, report, k):
	answer = [0] * len(id_list)
    accept_count = {x : 0 for x in id_list}
    
    for r in set(report):
        accept_count[r.split()[1]] += 1 
    
    for r in set(report):
    # 신고받은 횟수가 K보다 크면, 신고한 사람에게 통보횟수 1 증가
        if accept_count[r.split()[1]] >= k:
            answer[id_list.index(r.split()[0])] += 1
            
    return answer

정의된 변수 확인

id_list = ["muzi", "frodo", "apeach", "neo"]
accept_count = {x : 0 for x in id_list}
accept_count
{'muzi': 0, 'frodo': 0, 'apeach': 0, 'neo': 0}

좋은 웹페이지 즐겨찾기