function solution(array) {
// 가장 많이 나온 숫자를 찾는 문제
var answer = 0;
let obj = {};
let arr = [];
array.forEach((item) => {
obj[item] = array.filter((el) => {
return el === item;
}).length;
})
for(let i = 0; i < Object.keys(obj).length; i++) {
arr.push(obj[Object.keys(obj)[i]]);
}
// 최빈값이 여러개인지 체크
const multipleCheck = arr.filter((item) => {
return item === Math.max(...arr);
}).length;
const mode = Number(Object.keys(obj).find(key => obj[key] === Math.max(...arr)));
answer = multipleCheck > 1 ? -1 : mode
return answer;
}
객체와 배열을 이용하여 문제를 풀었당
내 풀이에서 객체 obj는 array 배열의 숫자들을 { 해당원소 : 해당 원소의 개수 } 쌍으로 가지고있는 역할을 한다.
array.forEach((item) => {
obj[item] = array.filter((el) => {
return el === item;
}).length;
})
이 코드에서 위에 적어놓은 역할을 하는 obj를 만든다!
그리고 arr 배열은 obj 배열이 가지고 있는 value들을 넣어놓은 배열이다.
이 문제는 어떤 숫자가 최빈값을 가지고 있는지 찾는 문제이다.
Math.max(...arr)
은 최빈값을 의미한다.
const multipleCheck = arr.filter((item) => {
return item === Math.max(...arr);
}).length;
arr배열을 순회하면서 최빈값이 여러개인지 체크하고,
const mode = Number(Object.keys(obj).find(key => obj[key] === Math.max(...arr)));
는 obj 객체에서 최빈값을 가지고 있는 숫자를 뽑아내는 코드이다.
answer = multipleCheck > 1 ? -1 : mode
최빈값이 여러개면 -1을 리턴하고 아니면 최빈값을 가지는 숫자를 answer 변수에 할당해준다.