[프로그래머스] lv.1 신고 결과

문제 설명

문제 설명

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

Muji가 개발하려는 시스템은 다음과 같습니다.

  • 각 사용자는 한 번에 한 명의 사용자를 신고할 수 있습니다.

    • 보고서 수는 무제한입니다.

      여전히 다른 사용자를 신고할 수 있습니다.

    • 사용자를 여러 번 신고할 수 있지만 동일한 사용자에 대한 신고는 한 번만 집계됩니다.

  • k회 이상 신고된 사용자는 게시판 이용이 금지되며, 신고한 모든 사용자에게 이메일이 발송됩니다.

    • 이용자가 신고한 모든 내용을 수집하고 최종적으로는 게시판 이용을 즉시 중단하고 스톱메일을 발송합니다.

다음은 전체 사용자 목록이 (“muzi”, “frodo”, “apeach”, “neo”)이고 k=2인 경우(예: 2회 이상 신고 시 차단)에 대한 예시입니다.

사용자 아이디 사용자가 신고한 ID 설명
“무지” “프로도” “muzi” 태그 “프로도”.
“복숭아” “프로도” “어피치”는 “프로도”를 보고했습니다.

“프로도” “네오” “Frodo”는 “neo”를 보고했습니다.

“무지” “네오” “muzi”는 “neo”를 보고했습니다.

“복숭아” “무지” “apeach”는 “muzi”를 보고했습니다.

각 사용자가 보고한 보고서 수는 다음과 같습니다.

사용자 아이디 보고서 수
“무지” 하나
“프로도” 2
“복숭아” 0
“네오” 2

위 예시에서 1회 이상 신고된 ‘프로도’, ‘네오’는 게시판 이용이 금지됩니다.

이때, 사용자별 신고 ID와 차단 ID를 정리하면 다음과 같다.

사용자 아이디 사용자가 신고한 ID 차단된 ID
“무지” (“프로도”, “네오”) (“프로도”, “네오”)
“프로도” (“네오”) (“네오”)
“복숭아” (“무지”, “프로도”) (“프로도”)
“네오” 존재하지 않는다 존재하지 않는다

따라서 “muzi”는 처리 결과 메일을 2통, “frodo”와 “apeach”는 각각 1통의 처리 결과 메일을 받게 됩니다.

사용자 ID를 포함하는 문자열 배열 id_list, 각 사용자가 보고한 사용자 ID 정보를 포함하는 문자열 배열 신고, 정지 기준이 되는 신고 건수 k가 매개변수로 주어지면 solve 함수를 완성하여 각 사용자에 대해 처리한 결과 받은 이메일 수를 배열로 반환합니다.


제한

  • 2 ≤ id_list의 길이 ≤ 1000
    • 1 ≤ id_list의 요소 길이 ≤ 10
    • id_list의 요소는 사용자의 아이디를 나타내는 문자열로 알파벳 소문자로만 구성된다.

    • id_list는 동일한 ID를 두 번 포함하지 않습니다.

  • 1 ≤ 보고서 길이 ≤ 200,000
    • 3 ≤ 보고서 요소 길이 ≤ 21
    • 보고서 요소는 “userid registeredid” 형식의 문자열입니다.

    • 예를 들어, “muzi frodo”는 “muzi”가 “frodo”로 보고된 것을 의미합니다.

    • id는 모두 소문자입니다.

    • 사용자 ID와 보고된 ID는 공백(공백)으로 구분됩니다.

    • 자진 신고하는 경우는 없습니다.

  • 1 ≤ 케이 ≤ 200; k는 자연수입니다.

  • 반환할 배열은 id_list에 포함된 id의 순서대로 각 사용자로부터 받은 결과 메일의 수입니다.


I/O 예시

id_list 보고서 케이 결과
(“무지”, “프로도”, “어피치”, “네오”) (“무지 프로도”, “어피치 프로도”, “프로도 네오”, “무지 네오”, “어피치 무지”) 2 (2,1,1,0)
(“콘”, “라이언”) (“라이언콘”, “라이언콘”, “라이언콘”, “라이언콘”) (0,0)

I/O 예시 설명

I/O 예제 #1

문제의 예와 같습니다.

I/O 예제 #2

“ryan”은 “con”을 4번 신고했지만, 사용자가 지정된 조건에 따라 동일한 사용자를 여러 번 신고한 경우 신고 건수는 1건으로 집계됩니다.

그래서 “con”이 1번 보고되었습니다.

3회 이상 보고된 사용자는 없으며 “con”과 “ryan”은 결과 이메일을 받지 못하고 있습니다.

따라서 (0, 0)을 반환합니다.


시간 제한 정보

  • 정확도 테스트: 10초

function solution(id_list, report, k) {
    const answer = new Array(id_list.length);
    answer.fill(0) 
    const report_list = {} //
    
    
    id_list.map((user)=>{
        report_list(user) = () //key로 userid를 value로 빈 배열을 가지는 객체
    })
    
    report.map((user)=>{
        const (user_id, report_id) = user.split(' ')
        if(!
report_list(report_id).includes(user_id)){ report_list(report_id).push(user_id) } }) for(const key in report_list){ if(report_list(key).length >= k){ //이용정지 유저 report_list(key).map((user)=>{ answer(id_list.indexOf(user)) += 1 }) } } return answer; }