function solution(array) {
let cnt ={}; //최빈값 담을 객체
let max =0; //최빈값 (value)
array.forEach((x) => {
cnt[x] = (cnt[x] || 0)+1;
});
max = Math.max(...Object.values(cnt));
let max_keys = Object.keys(cnt);
let ans_keys = max_keys.find( (key)=> cnt[key]=== max);
let several = Object.keys(cnt).filter( (key)=> cnt[key] === max);
if(several.length > 1){
return -1;
}
else{
return parseInt(ans_keys);
}
}
[문제]
input : array =[1,2,3,3,3,4] / [1,1,2,2] / [1]
[답]
output : 3 / -1 / 1
** 실수 포인트: 최빈값의 개수가 아닌 값이 나와야함
풀이
1. 배열 반복 :: array.forEach(x) => console.log(x); // 1,2,3,3,3,4
2. 객체에 [ ] (대괄호 사용) 동적으로 넣어주기 :: cnt[x] = (cnt[x] || 0) +1 ;
(1) cnt[x] (x=1) --> 처음에 값이 없으니 undefined임
(2) undefined || 0 = 0 나옴
(3) 그 값에 0+1 을 해줘서 객체 ={ "1" : 1} 생성해줌
:
(4) cnt[x] (x=2,3) --> 위와 같은 개념으로 {"1":1,"2":1,"3":1}
(5) cnt[x] (x=두번째 3) --> cnt[3] = 1 --> 1+1 --> {"1":1,"2":1,"3":2}
3. max = Math.max(...Object.values(cnt));
(1) 스프레드 연산자로 cnt객체의 값 중에서 최대값 추출 ( 최대값 value )
4. let max_keys = Object.keys(cnt);
(1) cnt객체의 keys 데이터
5. let ans_keys = max_keys.find( (key)=> cnt[key]=== max);
(1) find로 특정 key 데이터 찾기
(2) cnt객체[key] === 최대값 value
6. 최빈값이 2개이면 (array =[1,1,2,2] ) ==> -1 return
let several = Object.keys(cnt).filter( (key)=> cnt[key] === max);
(1) max값 (최대값 value 가 2개 이상이면 = several.length)
(2) if(several.length > 1){ return -1; }
7. 최빈값이 1개면 return parseInt(ans_keys);
[출처]
1. 프로그래머스
'코딩테스트' 카테고리의 다른 글
[프로그래머스 | JavaScript] 최댓값 만들기(1) (0) | 2023.10.12 |
---|---|
[프로그래머스 | JavaScript] 점의 위치 구하기 (0) | 2023.10.11 |
[프로그래머스 | JavaScript] 가위 바위 보 (0) | 2023.10.11 |
[프로그래머스 | JavaScript] 배열 두 배 만들기 & 배열 뒤집기 & 문자열 뒤집기 (0) | 2023.10.11 |
[프로그래머스 | JavaScript] 몫 구하기 (0) | 2023.09.22 |