프로그래머스 최빈값 구하기

YuRim Lee·2022년 11월 24일
0
post-thumbnail

아니 이거 레벨 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 함수
배열.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

리듀스함수를 이해를 못해서 약 한달간 천천히 푼문제 ..

일단 리듀스 함수 작동을 이해하면 풀기가능 !

profile
성장하는개발자

0개의 댓글