알고리즘 문제풀이/프로그래머스
폰켓몬 / js 풀이
Heman
2021. 6. 22. 21:27
프로그래머스 : 폰켓몬
https://programmers.co.kr/learn/courses/30/lessons/1845
문제풀이
이번 문제는 중소/중견 기업 채용연계 프로그램 "찾아라 프로그래밍 마에스터" 코딩 테스트에서 출제되었던 문제입니다.
풀이는 생각보다 간단한데요.
- nums 배열 길이의 n/2과 nums 배열 요소에서 중복값을 제거한 길이를 비교합니다.
- nums의 n/2 가 더 크다면 중복값을 제거한 종류의 수를 반환하고,
종류가 더 많다면 nums의 n/2 길이를 반환합니다.
이번 풀이에서 첫번째 코드는 제가 풀었던 방식이고, 두번째 코드는 자바스크립트의 Set
객체를 사용한 풀이입니다.
Set
은 중복된 값을 허용하지 않는 고유한 객체이며, 수정이나 추가 적용될 때마다 ===
와 동일한 연산이 이루어집니다.
코드
[ 일반적인 방식으로 풀이 ]
function solution(nums) {
const amount = nums.length/2; // 폰켓몬을 가질 수 있는 수
nums.sort((a, b) => a-b); // 배열의 정렬
let result = [nums[0],];
let tmp = nums[0];
for(let i=1; i<nums.length; i++){
if(tmp !== nums[i]){
result.push(nums[i]);
tmp = nums[i];
}
// 중복되지 않는 값을 result 배열에 삽입
}
if(amount > result.length) return result.length;
else return amount;
}
[ Set 객체를 활용 ]
function solution(nums) {
const amount = nums.length/2;
const result = [...new Set(nums)].length;
return amount > result ? result : amount
}
리뷰
자바스크립트, 알고리즘 공부와 코딩테스트를 위해서 기본적인 문제부터 자바스크립트로 풀이를 하고 있는데요. Set
객체라는 것을 이번에 알게 되었습니다.
문제 풀이 자체는 별로 어렵지 않았으나 새로운 객체의 존재를 알게되어 기분이 좋네요 ㅎㅎ