빈도 계산
*프로그래머스 발췌*
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다.
정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요.
최빈값이 여러 개면 -1을 return 합니다.
문제 풀이1 - Map과 배열
function solution(array) {
let map = new Map();
for (let one of array) map.set(one, map.get(one)? map.get(one)+1 : 1);
map = [...map].sort((a, b) => b[1]-a[1]);
return map.length === 1 || map[0][1] > map[1][1] ? map[0][0] : -1;
}
문제풀이2 - Map, for of 문
function solution(array) {
let map = new Map()
array.forEach(one => {
map.set(one, map.get(one)? map.get(one)+1: 1)
})
let maxFrequency = 0;
let mode = -1;
let isUnique = true; // 최빈값이 하나인지 확인하는 플래그
for([key, value] of map) {
if(value > maxFrequency) {
maxFrequency = value;
mode = key;
isUnique = true
} else if (value === maxFrequency) {
isUnique = false
}
}
return isUnique ? mode : -1;
}
문제풀이3 - reduce
function solution(array) {
const counts = array.reduce((a, c) => (a[c] ? { ...a, [c]: a[c] + 1 } : { ...a, [c]: 1 }), {});
const max = Math.max(...Object.values(counts));
const modes = Object.keys(counts).filter(key => counts[key] === max);
return modes.length === 1 ? +modes[0] : -1;
}
반응형
'개발 > Javascript' 카테고리의 다른 글
[js] 수학 공식을 활용한 코딩테스트 예제 (1) | 2024.09.21 |
---|---|
[js] reduce 함수 사용법 (0) | 2024.09.05 |
[코딩테스트] 주사위 게임 문제 풀이 (빈도 계산) (0) | 2024.08.29 |
배열, 문자열의 접두사, 접미사 비교 (0) | 2024.08.28 |
[js] Slice, Splice의 비교 (0) | 2024.08.24 |
댓글