아이디어
객체화 시켜서 푼다
처음에는 신고자 : 피신고자로 객체화 했는데 k값을 넘는 피신고자를 찾으려면
피신고자 : 신고자로 하고 피신고자의 길이를 보면 되니까 이렇게 바꿨다
처음에는 제제받는사람까지 구한후 result값을 또 새로 객체를 만들어서 신고자 : 제제받는 피신고자 이렇게 해야하나 싶었다 (이러면 쓸데없이 객체하나 더 만드는거 같았다)
고민하다가 let result = new Array(id_list.length).fill(0)로 0으로 채워진 배열을 만들고
제제받는 사람을 키 값으로 가지고 있는 값들의 list인덱스를 직접 result의 인덱스에 매칭시켜서 ++해줬다
코드
function solution(id_list, report, k) {
//객체화 시켜서
let obj = {};
let overk_tarket = [];
let result = new Array(id_list.length).fill(0);
//신고자와 피신고자 객체화
for (let i = 0; i < report.length; i++) {
let target = report[i].split(" ")[0];
let reporter = report[i].split(" ")[1];
// 아직 객체화 안된거면 객체로 만들고
if (obj[reporter] === undefined) {
obj[reporter] = [target];
} // 객체 있으면 배열로 푸쉬
else {
// 중복된거 삭제위해
if (!obj[reporter].includes(target)) {
obj[reporter].push(target);
}
}
}
//k값 넘는 사람(제제받는사람) 배열에 넣음
for (let key in obj) {
if (obj[key].length >= k) {
overk_tarket.push(key);
}
}
//제제 받는 사람을 키로 가지고 있는 값들의 list인덱스를 찾아서 배열에 ++
for (let i = 0; i < overk_tarket.length; i++) {
for (let j = 0; j < obj[overk_tarket[i]].length; j++) {
let index = id_list.indexOf(obj[overk_tarket[i]][j]);
result[index]++;
}
}
return result;
}
'코딩 테스트 > 프로그래머스 level1' 카테고리의 다른 글
신규 아이디 추천 (1) | 2022.04.27 |
---|---|
로또의 최고 순위와 최저 순위 (0) | 2022.04.27 |
체육복 (0) | 2022.04.19 |
K번째수 (0) | 2022.04.19 |
최소직사각형 (0) | 2022.04.19 |