-
[프로그래머스 / JS] Lv.0 최빈값 구하기Algorithm/프로그래머스 2022. 12. 15. 14:52반응형
문제 설명
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
제한사항
- 0 < array의 길이 < 100
- 0 ≤ array의 원소 < 1000
풀이
function solution(array) { let objCount = array.reduce((result, curr, idx) => { result[curr] = (result[curr] || 0) + 1 return result }, {}) let sortedKeys = Object.keys(objCount).sort((a, b) => objCount[b] - objCount[a]) if (objCount[sortedKeys[0]] === objCount[sortedKeys[1]]) return -1 else return Number(sortedKeys[0]) }
사고과정
- 각 숫자가 몇 개 담겨있는지 확인하기 쉽게 객체를 활용하면 좋겠다.
- reduce() 함수로 array의 각 원소에 접근하고 각 원소를 key값으로 하는 객체를 반환하도록 만들면 되겠는데?
- 최빈값을 어떻게 구분하지?
- sort()의 기준을 obj의 value로 해서 실행하면 value가 큰 순으로 key를 내림차순 정렬할 수 있겠다
- 최빈값이 중복되면 -1을 반환하는 조건이므로 if문 사용해서 조건에 따라 반환하자
평가
개선점
- obj가 아닌 map을 사용했으면 Number 함수를 생략 가능했을 거다.
알게된점
- result[curr] = (result[curr] || 0) + 1 으로 간략하게 객체의 값을 증가 시킬 수 있다.
반응형'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / JS] Lv.1 가장 가까운 글자 (0) 2022.12.20 [프로그래머스 / JS] Lv.0 분수의 덧셈 (0) 2022.12.19 [프로그래머스 / JS] Lv.0 외계행성의 나이 (0) 2022.12.13 [프로그래머스 / JS] Lv.0 구슬을 나누는 경우의 수 (0) 2022.12.13 [프로그래머스 / JS] Lv. 0 저주의 숫자 3 (0) 2022.12.13