Problem
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
Solution
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 arr.indexOf(max);
} else return -1;
}
1. key와 value값으로 구성된 map을 이용해서 풀었다. (각 숫자와 숫자가 몇번 나오는지 계산해야하기 때문)
2. map을 우선 최댓값으로 초기화해줘야 함! 숫자가 몇번 나오는지 계산하기때문에 map.get을 쓰기 때문이다.
3. map은 key만 같다면 value값은 바꿀 수 있다.
4. map.values 값 중에 큰 값을 찾기 위해 Array.from으로 배열로 만들어주고 Math.max로 큰 값 찾음
5. 최빈값이 여러 개일 수도 있으므로 arr.indexOf()는 앞에서부터 같은 값의 인덱스를 return하고 arr.lastIndexOf()는 뒤에서부터 같은 값의 인덱스를 return 하므로 이 둘이 같으면 arr에서 max의 index를 가져온다(arr은 숫자대로 배열돼있으므로 편하게 index로 최빈값 가져오기 가능)
6. 아니라면 return -1
'프로그래머스 (JS) > Lv. 0' 카테고리의 다른 글
[Programmers] 120907번 - OX퀴즈 (0) | 2023.03.11 |
---|---|
[Programmers] 120863번 - 다항식 더하기 (0) | 2023.03.10 |
[Programmers] 120871번 - 저주의 숫자 3 (0) | 2023.03.09 |
[Programmers] 120921번 - 문자열 밀기 (0) | 2023.03.09 |
[Programmers] 120880번 - 특이한 정렬 (0) | 2023.03.09 |