최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
function solution(array) {
const list = new Set(array);
const countList = [...list].map((listEle, idx) => {
return array.filter(arrEle => arrEle === listEle).length
});
const sortList = [...countList].sort((a,b) => b - a);
let max = sortList[0], idx = countList.indexOf(max);
return sortList[0] === sortList[1] ? -1 : [...list][idx];
}
=> 내가 푼 방법은 문제의 요구사항을 코딩으로 풀어둔 느낌이고
계속 새로운 배열을 만들어줘야 하기 때문에 효율적으로 푼 느낌이 없는 것 같다..
참고한 풀이를 정리하는 이유는,
reduce로 주어진 값과 주어진 값이 반복된 횟수를 하나의 객체로 관리할 수 있게 활용했기 때문이다.
const solution = (array) => {
const counter = array.reduce((acc, cur) => ({
...acc,
[cur]: (acc[cur] || 0) + 1
}), {})
const items = Object.keys(counter).map((key) => [
Number(key), counter[key]
]).sort((a, b) => b[1] - a[1])
if (items[0][1] === items?.[1]?.[1]) {
return -1
}
return items[0][0];
}
function solution(array) {
const counts = array.reduce((acc, cur) => ({
...acc,
[cur]: (acc[cur] || 0) + 1
}), {})
const sorting = Object.keys(counts).sort((a,b) => counts[b] - counts[a]);
return counts[sorting[0]] === counts[sorting[1]] ? -1 : Number(sorting[0])
}