알고리즘 문제풀이/프로그래머스

폰켓몬 / 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 객체라는 것을 이번에 알게 되었습니다.

문제 풀이 자체는 별로 어렵지 않았으나 새로운 객체의 존재를 알게되어 기분이 좋네요 ㅎㅎ