문제
https://school.programmers.co.kr/learn/courses/30/lessons/92334
나의 접근 방법
먼저 new Set을 이용하여 중복제거를 해준다.
그리고 신고당한 횟수를 저장해주는 배열을 만들어주고 , 그 배열을 이용하여 정지된 아이디를 배열에 저장해준다.
정지된 아이디를 이용하여 어떤 한 캐릭터가 신고한 캐릭터 중에 정지된 아이디가 있으면 true, 없으면 false를 변수에 넣는다.
신고한 캐릭터 인덱스에 변수값이 true면 1을 더해주고 false면 0을 더해줘 최종 메일을 보낼 배열을 리턴해준다.
(예를들어 어피치가 무지와 프로도를 신고했는데 그중에 프로도만 정지된 아이디라서 어피치 인덱스스에 1만 더해주게된다.)
function solution(id_list, report, k) {
//신고당한 횟수를 저장할 배열
let report_count = Array(id_list.length).fill(0); //[0,0,0,0]
//보낼 메일을 저장할 배열
let mail_count = Array(id_list.length).fill(0);//[0,0,0,0]
//정지되는 아이디를 저장할 배열
let end_Id = [];
//중복된 신고를 제거해준다
const deduplication = [...new Set(report)];
for(let i = 0; i< deduplication.length; i++){
//신고한 사람
const reporter = deduplication[i].split(' ')[0];
//신고당한 사람
const repotered = deduplication[i].split(' ')[1];
//신고당한 사람의 인덱스를 찾는다
let index = id_list.indexOf(repotered);
//신고당한 사람의 인덱스에 1씩 증가시킨다
report_count[index] += 1;
//신고당한 아이디 인덱스가 k이상이면 정지될 아이디들 저장한다
if(report_count[index] >= k){
end_Id.push(id_list[index])
}
}
//mail_count 리턴할 배열
deduplication.forEach(i => {
const reporter = i.split(' ')[0];
const repotered = i.split(' ')[1];
//신고한 사람의 인덱스를 찾는다
const index = id_list.indexOf(reporter);
//신고당한 사람이 정지된 아이디가 있으면 true, 아니면 false
const is_end = end_Id.includes(repotered);
//신고한 사람이 정지된 아이디가 있으면 1을 더해주고 아니면 0을 더해준다.
mail_count[index] += is_end ? 1 : 0;
});
return mail_count
}
느낀점
카카오 문제라 그런지 1단계치고는 꽤나 어려웠다... 신고당한 횟수 배열을 만드는거 까지는 무리없이 만들었지만 이후 메일 전송할 배열을 만드는 부분에 막혀 많은 고민을 했다 !