문제 설명
문제 설명
제한
I/O 예시 설명
시간 제한 정보
신입사원인 무인양품은 나쁜 게시판 사용자를 신고하고 수정 결과를 이메일로 보내는 시스템을 개발하려고 합니다.
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;
}