프로그래머스 : 폰켓몬
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
객체라는 것을 이번에 알게 되었습니다.
문제 풀이 자체는 별로 어렵지 않았으나 새로운 객체의 존재를 알게되어 기분이 좋네요 ㅎㅎ
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
멀쩡한 사각형 / js 풀이 (0) | 2021.06.29 |
---|---|
신규 아이디 추천 / js 풀이 (0) | 2021.06.23 |
K번째수 / js 풀이 (0) | 2021.06.21 |
로또의 최고 순위와 최저 순위 / js 풀이 (0) | 2021.06.18 |
[3차] 파일명 정렬 / js 풀이 (0) | 2021.04.23 |