본문 바로가기

Programming

[Algorithm] 프로그래머스 - level1 <폰켓몬>

<문제소개>

  • 문제명 : 폰켓몬
  • 사이트 : 프로그래머스
  • 난이도 : level 1
  • 사용 언어 : javascript


<문제 풀이>

접근 방식

1. 주어진 nums 배열에서 nums의 길이 / 2( = maxChoise)만큼의 길이의 배열을 만드는 데 서로 다른 원소를 고를 수 있는 경우의 수가 몇 가지인지 계산 (= countChoise)

2. countChoisemaxChoise보다 많으면 답은 maxChoise

3. countChoisemaxChoise보다 적으면  답은 countChoise


<내 코드>

function solution(nums) {
  const countNums = nums.length; 
  const maxChoise= countNums / 2;
  const choise  = [];
  
  for (let i = 0; i < countNums; i++) {
    if (choise.length === maxChoise) {
      countChoise = maxChoise;
      
      return countChoise;
    }
   
    if (choise.indexOf(nums[i]) === -1) {
      choise.push(nums[i]);
    }
  }
  
  countChoise = choise.length;

  return countChoise;
}

 


<보완할 점>

Set 객체를 사용하면 원시값이든 참조값이든 상관없이 unique한 값을 저장할 수 있다.

 

 -> array객체를 set객체로 변환한 후 다시 array객체로 변환하면 유일한 값만을 포함하는 array객체를 쉽게 만들수 있다.

 

1. array객체를 set객체로 변환

const nums = [1, 2, 3, 1];

mySet = new Set(nums); // {1, 2, 3}

2. set객체를 array객체로 변환

// set 객체를 array객체로 변환하는 방법 1 (Array.from 메소드)
Array.from(new Set(nums));

// set 객체를 array객체로 변환하는 방법 2 (전개 연산자)
[...new Set(nums)]

 

코드 수정

function solution(nums) {
  const countNums = nums.length; 
  const maxChoise = countNums / 2;
  const uniqueArray  = [...new Set(nums)];
  const uniqueChoise = unuqueArrat.length;
  
  return uniqueChoise > maxChoise ? maxChoise : uniqueChoise;
}