코딩 테스트 연습/프로그래머스 level 0
[프로그래머스] lv0. 최빈값 구하기 (JS)
카누가 좋아요
2023. 6. 26. 00:54
❓ 문제
코딩테스트 연습 - 최빈값 구하기 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
💡 해결하기
1️⃣ 주어진 array에 등장하는 숫자들의 각각의 개수를 센 것을 기록할 count 객체를 생성한다.
count 객체의 key는 array에 등장하는 숫자가 될 것이고, value는 array에 각 숫자가 등장한 횟수가 될 것이다.
2️⃣ array의 각 요소들을 하나씩 탐색하면서 count 객체에 등장 횟수를 기록한다.
count 객체에 현재 탐색 중인 숫자가 key로 들어있지 않다면 그 숫자를 key로 하고 1을 값으로 하여 count 객체에 새로 추가하고, 현재 탐색 중인 숫자가 key로 들어 있다면 그 숫자의 value에 1을 더한다.
* 현재 탐색 중인 숫자가 객체에 key로 존재하는지를 확인하기 위해서는 array.hasOwnProperty(확인하고 싶은 숫자); 메서드를 사용하면 된다.
3️⃣ count 객체의 key와 value를 쌍으로 저장하기 위해 새로운 배열 하나를 생성한다.
count 객체를 돌면서 새로운 배열에 [key, value] 형태로 값을 추가한다. (이차원 배열 형태)
4️⃣ 새로운 배열을 숫자가 등장한 횟수(value) 기준으로 내림차순 정렬한다.
정렬 이후, 새로운 배열의 첫번째 값과 두번째 값에서 등장 횟수([0][1]과 [1][1])가 같은 경우 최빈값이 여러개이므로 -1을 반환하고, 같지 않은 경우 최빈값인 첫번째 요소([0][0])를 반환하면 된다.
이때, type이 number여야 하므로 형변환 뒤 반환한다.
💻 JS로 코드 작성해보기
// 배열의 각 요소에서 첫번째 요소 기준으로 내림차순 정렬을 위한 기준
function criteria(a, b) {
return b[1] - a[1];
}
function solution(array) {
// 1.
let nums = {};
// 2.
for (let i = 0; i < array.length; i++) {
if (nums.hasOwnProperty(array[i]) === false) nums[array[i]] = 1;
else nums[array[i]] += 1;
}
// 3.
const _sort = [];
for (let num in nums) {
_sort.push([num, nums[num]]);
}
// 4.
_sort.sort(criteria);
if (_sort.length !== 1 && _sort[0][1] === _sort[1][1]) return -1;
else return Number(_sort[0][0]);
}