최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array
가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
0 < array
의 길이 < 100
0 <= array
의 원소 < 1000
이 문제 역시 자바스크립트 최빈값 알고리즘을 이용해야 한다. 이 문제를 풀기 위해서 Map 객체
를 사용해야 한다. 우선 배열에서 가장 큰수를 찾고 그 수만큼의 반복문을 돌리면서 Map 객체
를 초기화하는 과정을 거친다. 그리고 배열에 있는 숫자를 Map 객체
의 인덱스로 잡고 get
함수를 이용하여 찾을 때마다 1씩 증가해준다. 그리고 Array.from()
을 사용하여 value값만 얻는 새로운 얕은복사한 배열을 만들어준다. 이후에 가장 큰 수를 얕은 복사를 한 배열에서 찾아서 그 수가 중복이면 -1을 return 해주고 아니면 그 수를 return 해준다.
map을 객체로 만들어줘서 수정 삭제가 용이하게 해준다.
기존 배열을 변경하지 않고 새로운 얕은 복사를 한 배열을 만들어준다.
앞에서 순서대로 원하는 값을 찾고 index 값을 얻게 해준다.
뒤에서 순서대로 원하는 값을 찾고 index 값을 얻게 해준다. 하지만 index는 앞에서 순서대로 얻은 값이다.
function solution(array) {
let map = new Map();
for(let i=0; i<=Math.max(...array); i++){
map.set(i,0);
}
for(let i=0; i<array.length; i++){
map.set(array[i], map.get(array[i]) + 1);
}
let arr = Array.from(map.values());
let max = Math.max(...arr);
if(arr.indexOf(max) !== arr.lastIndexOf(max)){
return -1;
} else{
return arr.indexOf(max);
}
}