문제 설명
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 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 |
목적
최빈값 return 하기 / 최빈값이 여러개면 -1 return
나의 코드
function solution(array) {
// count 객체 만들어서 변수에 저장
const count = array.reduce((acc, cur) => {
acc[cur] = acc[cur] ? acc[cur] + 1 : 1;
return acc;
}, {})
// values 값 꺼내기
const values = Object.values(count);
// max 찾기
const max = Math.max(...values);
// max 개수 체크
const check = values.filter(v => v === max)
if (check.length > 1) {
return -1;
} else {
return Number(Object.keys(count).find(key => count[key] === max))
}
}
방식
개수를 세는 거니까 reduce
- 각 숫자가 몇 번 나왔는지 센다
- 나온 횟수들만 꺼낸다
- 그중 가장 큰 횟수를 찾는다
- 그 최대 횟수가 몇 개 있는지 본다
- 여러 개면 -1, 하나면 그 숫자를 반환한다
다른 사람의 코드 ㅡ 자료구조(map)와 정렬로 압축한 풀이
function solution(array) {
let m = new Map();
for (let n of array) m.set(n, (m.get(n) || 0)+1);
m = [...m].sort((a,b)=>b[1]-a[1]);
return m.length === 1 || m[0][1] > m[1][1] ? m[0][0] : -1;
}
내 코드와 차이점
- Map
- for...of
- 배열로 펼치기 [...]
- 정렬 sort
을 사용함.
나는 최대값이 몇 개인지 직접 검사하는 방식
저 코드는 정렬해서 1등과 2등을 비교하는 방식
for (let n of array)
배열을 하나씩 돈다
array = [1, 2, 3, 3, 3, 4] 라면
n은 차례대로 1, 2, 3, 3, 3, 4를 돈다
[...m]
Map을 배열로 펼침
[[1, 2], [2, 1], [3, 4]] → [숫자, 등장횟수]
m.set(n, (m.get(n) || 0) + 1);
→ n이라는 숫자의 등장 횟수를 1 증가시켜서 저장해라
sort((a, b)=>b[1]-a[1])
⇒ 등장횟수 기준 내림차순 정렬
a는 예를 들어 [1, 2]
b는 예를 들어 [3, 4]
그러면 a[1] = 2 / b[1] = 4
즉 [1]은 등장횟수 자리
느낀점
단순히 값을 구하는 것뿐만이 아니라 데이터를 어떻게 구조화해서 다루느냐가 중요하다는 것을 느꼈다. 나는 reduce를 활용해서 각 숫자의 개수를 직접 세고, 최대값을 찾은 뒤 다시 조건을 검사하는 방식으로 풀었는데, 흐름을 하나씩 따라가면서 이해하기에는 좋았지만 코드가 다소 길어지는단점이 있었다...
반면 다른 사람의 코드는 Map과 정렬을 활용해서 등장 횟수를 관리하고, 정렬 후 상위 두개만 비교하는 방식으로 훨씬 간결하게 해결한 점이 인상깊었다...
특히 map을 사용하면 키-값 구조로 데이터를 명확히 관리할 수 있고, 배열로 변환 후 정렬까지 자연스럽게 이어지는 흐름을 만들 수 있다는 점을 새롭게 배웠다.
'코딩테스트' 카테고리의 다른 글
| [프로그래머스] 피자 나눠 먹기 (2) (0) | 2026.04.05 |
|---|---|
| [프로그래머스] 피자 나눠 먹기 (1) (0) | 2026.04.05 |
| [프로그래머스] 짝수는 싫어요 (0) | 2026.04.04 |
| [프로그래머스] 중앙값 구하기 (0) | 2026.04.02 |
| [프로그래머스] 배열 두 배 만들기 (0) | 2026.04.01 |