1 분 소요

프로그래머스 알고리즘 문제를 풀다가 중복 문자를 제거하는 메서드가 있지 않을까 구글링을 하면서 Set을 알게 되었다. Set의 사용법을 정리해보자.

우선, Set은 자료형에 상관 없이 중복되는 값을 제외하고 유일한 값만 저장해서 반환한다.

구조는 다음과 같다.

new Set([iterable]);

간단한 예시로 알아보자.

const setTest = new Set();

setTest.add(1); // {1}
setTest.add(2); // {1, 2}

// 1을 add해도 set에 1이 있어서 한번 더 저장하지 않고 무시한다.
setTest.add(1); // {1, 2}

위의 예시처럼 초기화가 되지 않은 setTest에 add로 하나씩 넣어주면서 중복되는 값은 Set이 무시하고 저장해준다.

이러한 특성을 이용해서 알고리즘 문제에 적용해보았다.


[프로그래머스] 폰켓몬 문제

고를 수 있는 폰켓몬들을 같은 종류가 아닌 최대한 다양한 종류의 포켓몬을 고르고 싶다는 문제이다. 생각순서를 작성해보자.

생각순서

  1. 고를 수 있는 폰켓몬의 수를 구하기
  2. 폰켓몬 번호에서 중복 빼고 몇 종류가 있는지 확인하기
  3. 종류 갯수에서 고를 폰켓몬의 수를 조합하기

정도로 생각을 해보았다.


function solution(nums) {
  // 우선 고를 수 있는 폰켓몬의 수를 구하기
  var pick = nums.length / 2;

  // 폰켓몬 번호에서 중복 빼고 몇 종류가 있는지 확인
  var type = [...new Set(nums)];

  // 종류 갯수에서 고를 폰켓몬의 수 조합
  if (type.length >= pick) {
    return pick;
  } else if (type.length < pick) {
    return type.length;
  }
}

폰켓몬의 종류를 확인할 때 원본 배열에 영향을 주지않는! 저번에 배운! 스프레드 연산자로 깊은 복사를 해주었다!!

알고리즘 풀 때 for문과 if문의 늪에서 조금씩 벗어나고 있어서 만족스럽다😄

댓글남기기