최빈값 구하기
문제 설명
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 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입니다.
문제 해석 및 풀이
lv0에 간단한 문제다.
매개변수로 주어진 array 값을 for문으로 돌면서 특정 값에 갯수를 저장했다가 최대 갯수에 해당하는 아이를 return 해주면 되는 간단한 문제다.
해시맵과 비슷한 구조로 각 숫자마다 갯수를 저장하는 데이터가 있다면 쉽게 문제를 해결할 수 있다. 이를 위해 두개의 배열을 만들어서 첫 번째 배열엔 기존에 없던 값일경우 그대로 key값을 의미하는 숫자를 넣고 해당 index를 기억하고 있다가 새로운 데이터면 두 번째 배열에 push 명령어로 새로운 개수 1을 넣어주고 기존에 있던 값이면 첫 번째 배열에서 해당 값에 index를 추출해서 두 번째 배열에 해당 인덱스로 접근해 값을 +1 해준다.
이 작업을 for문을 돌면서 반복하고 나면 나오는 결과인 두개의 배열에서 두 번째 배열의 최대 갯수를 구해 해당 갯수가 두 번째 배열에 두개이상 있으면 -1을 return하고 아니라면 해당 값의 index를 추출해서 첫 번째 배열에서 해당 index 값을 가져와 return 해주면 된다.
풀이 코드
function solution(array) {
var answer = 0;
const a = [];
const b = [];
for (let i = 0; i < array.length; i++) {
if (!a.includes(array[i])) {
a.push(array[i]);
b.push(1);
} else {
const index = a.indexOf(array[i]);
b[index] += 1;
}
}
const max = Math.max(...b);
const count = b.reduce((c, a) => c + (max === a), 0);
if (count === 1) {
const index = b.indexOf(max);
answer = a[index];
} else {
answer = -1;
}
return answer;
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] LV1. 햄버거 만들기 (0) | 2023.12.04 |
---|---|
[프로그래머스] LV1. 대충 만든 자판 (1) | 2023.12.02 |
[프로그래머스] LV1. 덧칠하기 (1) | 2023.12.01 |
[프로그래머스] lv1. 달리기 경주 (4) | 2023.11.25 |