let answer = new Array(id_list.length).fill(0);
우선 answer 값을 Number 자료형 0으로 채워서 이후 인덱스 접근을 통해 조건 만족시 산술이 가능하게 하였다.
let reports = [...new Set(report)].map((item) => item.split(" "));
여러번 신고하여도 한번의 신고 횟수로 처리되기 때문에 Set함수를 이용하여 중복되는 값들을 없앤 후, map method를 이용하여 각 인덱스 값을 다루기 쉬운 배열로 치환하여 reports라는 변수에 저장하였다.
Array.map()
- 각 배열 값에 대한 콜백함수 결과를 반환
Set
- value만을 저장하며 중복을 허용하지 않는 Collection
reported = new Map();
reports.map((item) => {
reported.set(item[1], reported.get(item[1]) + 1 || 1);
});
신고받은 사람과 그 횟수를 Map함수의 형태로 reported라는 변수에 저장하였다. array.map() method를 사용하여 reports의 각 인덱스("신고자 신고당한사람") 접근하여 신고 받은 사람을 Key, 그 횟수를 value 형태로 저장하였다.
Map
다양한 자료형의 key를 허용하고, key-value 형태의 자료형을 저장 가능한 Collection.
Object와 비교하여 다양한 자료형의 key를 허용하고, 값이 추가/삭제 시 전용 메스드를 통해야함
Map(3) { 'frodo' => 2, 'neo' => 2, 'muzi' => 1 }
Map을 통해 신고받은 사람에게 접근하고 reports를 반복문을 돌려서 k번 이상 신고받은 사람을 신고한 사람에 접근할 때마다 id_list index에 위치한 answer값의 인덱스 값을 +1 해주었다
for (let item of reports) {
if (reported.get(item[1]) >= k) {
answer[id_list.indexOf(item[0])] += 1;
}
}