(프로그래머 Lv.1) – 신고 결과 받기 (2022 KAKAO 블라인드 채용)

(문제 설명)

신입사원인 무인양품은 나쁜 게시판 사용자를 신고하고 수정 결과를 이메일로 보내는 시스템을 개발하려고 합니다. Muji가 개발하려는 시스템은 다음과 같습니다.

  • 각 사용자는 한 번에 한 명의 사용자를 신고할 수 있습니다.
    • 보고서 수는 무제한입니다. 여전히 다른 사용자를 신고할 수 있습니다.
    • 사용자를 여러 번 신고할 수 있지만 동일한 사용자에 대한 신고는 한 번만 집계됩니다.
  • k회 이상 신고된 사용자는 게시판 이용이 금지되며, 신고한 모든 사용자에게 이메일이 발송됩니다.
    • 이용자가 신고한 모든 콘텐츠를 수집하여 마지막에 이용정지 메일을 발송하며, 게시판 이용을 즉시 중단합니다.

(카누 코드)

import itertools
def solution(id_list, report, k):
    report = list(set(report)) #중복 제거
    bad = ()
    good = ()
    for i in report:
        re = i.split(" ")
        bad.append(re(1))
        good.append(re(0))
    fin_report = (() for i in range(len(id_list)))
    for i in range(len(bad)):
        fin_report(id_list.index(bad(i))).append(good(i))
    for i in range(len(fin_report)):
        if len(fin_report(i))<k:
            fin_report(i) = ()
    fin_list=list(itertools.chain(*fin_report))  # 중첩 리스트 풀기
    answer = (fin_list.count(i) for i in id_list)
    return answer

(다른 코드)

def solution(id_list, report, k):
    answer = (0) * len(id_list)    
    reports = {x : 0 for x in id_list}

    for r in set(report):
        reports(r.split()(1)) += 1

    for r in set(report):
        if reports(r.split()(1)) >= k:
            answer(id_list.index(r.split()(0))) += 1

    return answer

1. id_list 길이만큼 항목이 0개인 목록 응답을 생성합니다.

2. id_list의 요소로 키를 사용하고 값을 0으로 사용하여 사전을 만듭니다.

3. 보고서에 문장을 삽입하여 중복을 제거한 후 사전 값을 업데이트하여 각 탐지기가 몇 번 보고되었는지 확인합니다.

4. 값이 k보다 크면 해당 id(응답)의 값을 1씩 증가

5. 회신

사전을 사용하는 것은 간단하고 깨끗한 솔루션입니다

여러 값을 인덱싱하고 참조해야 하는 경우 사전을 사용하여 해결하는 습관을 들이십시오.