최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
0 < array의 길이 < 100
-1000 < array의 원소 < 1000
array | result |
---|---|
[1, 2, 3, 3, 3, 4] | 3 |
[1, 1, 2, 2] | -1 |
[1] | 1 |
입출력 예 #1
[1, 2, 3, 3, 3, 4]에서 1은 1개 2는 1개 3은 3개 4는 1개로 최빈값은 3입니다.
입출력 예 #2
[1, 1, 2, 2]에서 1은 2개 2는 2개로 최빈값이 1, 2입니다. 최빈값이 여러 개이므로 -1을 return 합니다.
입출력 예 #3
[1]에는 1만 있으므로 최빈값은 1입니다.
function solution(array) {
let arr = new Map();
for(let i = 0; i < array.length; i++){
arr.set(array[i], (arr.get(array[i])||0) + 1);
}
let max = Math.max(...[...arr].map(v => v[1]))
let count = [...arr].filter(v => v[1] === max).length
return count > 1 ? -1 : [...arr].find(v => v[1] === max)[0]
}
map()
을 이용해서 각 값마다 갯수를 세긴 했는데, 마지막 출력 값을 너무 복잡하게 한 것 같다. 값중에서 제일 큰 값을 max에, 최대값의 갯수를 count에다 넣은 다음 갯수가 1보다 많다면 -1을, 아니라면 max값과 일치하는 인덱스를 출력해 주었다.
function solution(array) {
let m = new Map();
for (let n of array) m.set(n, (m.get(n) || 0)+1);
m = [...m].sort((a,b)=>b[1]-a[1]);
return m.length === 1 || m[0][1] > m[1][1] ? m[0][0] : -1;
}
이 풀이에서는 똑같이 map()
에 넣은 다음 값의 순서대로 내림차순으로 정렬해 주었다. 그리고 만약 배열이 한 값으로만 이루어져있거나 첫번째 인덱스의 값이 두번째 인덱스보다 크다면(다르다면) 제일 맨 앞의 값을 인출, 아니라면 -1을 인출해 주었다. 최빈값을 인출하는 방법이 더욱 간결해 보인다.