아니 이거 레벨 0 인데 왜캐 어렵나유
리듀스함수 내가 정복하고 만다
설명은 모두 주석으로 했어요 !!!
function solution(array) {
// 코드 설명
//acc (누적값)의 제일 초깃값이 {}이 된다
// 새로운 객체 {} 에 키가 "가" 인 것에 값을 더해주고 빼준다
// 결국 {"가" : 2, "나" : 1, "다" : 1} 인 배열을 만들어 주기 위함이당 ,,,
// 그렇게 배열을 만들어서 배열의 키의 값이 가장 숫자가 큰것의 키를 가져온다
// 그게 바로 최빈값!
let check = array.reduce((acc, cur) => {
console.log(acc , cur);
acc[cur] = (acc[cur] || 0 )+1
console.log(acc);
return acc ;
}, {} )
// Object.values(check );
// 객체의 키의밸류값들을 배열로 뿌려준다.
console.log(Object.values(check));
console.log(Math.max(...Object.values(check)))
// max 할때는 Math.max(1, 2, 3) 과 같이
// 숫자가 펼쳐저있어야한다.
const max = Math.max(...Object.values(check));
console.log(max);
const key = Object.keys(check).filter(
(key)=> check[key] == max);
console.log(key);
return key.length > 1 ? -1 : Number(key[0]);
}
이문제의 키포인트 : reduce 함수 , Object.keys 를 다룰수 있는지
배열.reduce((누적값, 현잿값, 인덱스, 요소) =>
{ return 결과 },
초깃값);
// 예제코드
const oneTwoThree = [1, 2, 3]
let result = oneTwoThree.reduce((acc, cur, i, e) => {
console.log(acc, cur, i, e);
return acc + cur;
}, 0);
// 0 1 0
// 1 2 1
// 3 3 2
console.log(result); // 6
리듀스함수를 이해를 못해서 약 한달간 천천히 푼문제 ..
일단 리듀스 함수 작동을 이해하면 풀기가능 !