[programmers] 최빈값 구하기 - JavaScript
주어진 정수 배열에서 가장 자주 나오는 값을 찾아 최빈값을 반환하는 solution 함수를 작성하는 문제입니다. 배열의 최댓값을 기준으로 새로운 배열을 생성하고, 해당 값에 해당하는 인덱스의 값을 1씩 증가시킵니다. 그 후, 새로운 배열에서 가장 큰 값을 가진 인덱스를 반환하며, 중복된 값이 있다면 -1을 반환합니다.
Jan 01, 2024
문제 설명
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열
array
가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.제한사항
- 0 <
array
의 길이 < 100
- 0 ≤
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입니다.
solution.js
function solution(array) { // array의 최댓값만큼의 길이를 가진 새로운 배열 생성 let newArray = new Array(Math.max(...array)+1).fill(0); // array 반복문을 통해, 해당 값에 해당하는 index의 값 += 1 for (let i = 0; i < array.length; i++) { newArray[array[i]] += 1; } // newArray의 최댓값에 해당 하는 index 출력 // 만약 indexOf와 lastIndexOf가 지칭하는 값이 같으면, -1 출력 (중복인 경우 확인) if (newArray.indexOf(Math.max(...newArray)) !== newArray.lastIndexOf(Math.max(...newArray))) { return -1 } else { return newArray.indexOf(Math.max(...newArray)); }; }
핵심 키워드
- Math.max() 함수는 입력값으로 받은 0개 이상의 숫자 중 가장 큰 숫자를 반환한다.
- Array.fill() 함수는 배열의 인덱스 범위 내에 있는 모든 요소를 정적 값으로 변경한다. 그리고 수정된 배열을 반환한다.
- newArray 배열에 기존 array 배열의 값에 해당하는 인덱스의 값을 1씩 증가시켜서, 가장 많이 출현한 인덱스를 반환한다.
- Array.indexOf() 함수는 배열에서 주어진 요소를 찾을 수 있는 첫 번째 인덱스를 반환하고, 찾을 수 없는 경우 -1을 반환한다.
결론!
해당 문제를 풀면서 Array.fill() 함수, Array.indexOf() 함수의 사용법을 익힐 수 있었다.
Share article