개발 기록 남기기✍️

[프로그래머스] 최빈값 구하기 본문

코딩 테스트 연습

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

너해동물원 2022. 12. 30. 13:54

🗒️ 문제 설명

최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 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

❇️ 나의 풀이

  • 겁나 어렵다... 이게 무슨 레벨 0 문제란 말임!!! 그래서 열심히 구글링.. 또 구글링...
  • 이번 문제는 배열 뿐만 아니라 객체의 속성을 잘 이해하는지를 물어보는 것 같다.
  • array를 reduce 함수로 돌면서 새로운 객체를 만든다.
    • 객체는 빈 객체로 시작한다. 
    • acc 객체가 cur라는 프로퍼티를 갖고 있다면 acc[cur]에 +=1 을 해주고, 없다면 key는 cur이고 값은 1인 프로퍼티를 생성한다. 그럼 각 배열 item의 이름으로 된 key와 해당 item 갯수 만큼의 value가 만들어진다.
  • 생성된 객체의 key를 reduce 함수로 돌면서 최빈값을 추출한다.
    • reduce 함수에 최초값을 작성 안하면 0부터 시작한다는 것 인지하기!
    • acc의 value가 cur의 value 보다 크면 answer에 acc 할당, 만약 acc의 value가 cur의 value와 같다면 (갯수가 같다면) answer에 -1 할당, 그 외에는 answer에 cur을 할당한다. 
  • key는 문자형이므로, Number()로 숫자형으로 바꿔서 answer를 return한다.
function solution(array) {
    const newObject = array.reduce((acc, cur) => {
    acc.hasOwnProperty(cur) ? (acc[cur] += 1) : (acc[cur] = 1);
    return acc;
}, {});
    
    const answer = Object.keys(newObject).reduce((acc, cur) =>
    newObject[acc] > newObject[cur] ? acc : newObject[acc] === newObject[cur] ? -1 : cur
);
    
    return Number(answer);
}

 

 

💻 참고

🔹 https://yohanpro.com/posts/programming/mode

 

reduce와 lodash로 최빈값을 계산해보자 - Yohan's Developer Diary

어쩌다보니 면접을 진행하는 사람으로 들어가게 되는데, 코딩테스트를 진행하게 된다. 그 때는 보통 배열을 다루는 실력을 보게 된다. 하지만 안타깝게도 쉬운 문제이지만 제대로 해결하지 못

yohanpro.com