문제 : https://school.programmers.co.kr/learn/courses/30/lessons/120812
최빈값 : 데이터 집합에서 가장 많이 등장한 데이터
구하는 방법
1. 데이터를 index(혹은 key)로 보고
2. 해당 index의 값이 나올 때마다 +1
3. 가장 많이 나온 index의 값을 구한다
map, reduce 등등 방법이 많았지만
지금 내가 이해하기 가장 쉬운 코드로 가져옴
💡
function solution(array) {
// 빈 map 생성
let map = new Map();
// 배열의 요소가 1개라면 바로 return => 그 값이 최빈값
if(array.length === 1) {
return array[0]
}
// array의 가장 큰 값까지 for문을 돌면서 key에 담기
for (let i = 0; i <= Math.max(...array); i++) {
map.set(i, 0)
}
// array의 길이만큼 돌면서 key에 해당하는 값(value)에 +1
for (let i = 0; i < array.length; i++) {
map.set(array[i], map.get(array[i]) + 1)
}
// 값(value)들만 모은 배열 생성 후 최대값 찾기
const arr = Array.from(map.values())
const max = Math.max(...arr)
// 배열의 최대값의 첫 인덱스와 마지막 인덱스가 같지 않다면
// (=최빈값이 1개가 아니라면) return -1
// 1개라면 그 값을 return
if(arr.indexOf(max) !== arr.lastIndexOf(max)) {
return -1;
} else {
return arr.indexOf(max)
}
}