프로그래머스 코딩테스트 레벨1. 폰켓몬(JavaScript)

부기·2022년 1월 30일

문제설명

홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다.
홍 박사님 연구실의 폰켓몬은 종류에 따라 번호를 붙여 구분합니다. 따라서 같은 종류의 폰켓몬은 같은 번호를 가지고 있습니다.
당신은 최대한 다양한 종류의 폰켓몬을 가지길 원하기 때문에, 최대한 많은 종류의 폰켓몬을 포함해서 N/2마리를 선택하려 합니다. N마리 폰켓몬의 종류 번호가 담긴 배열 nums가 매개변수로 주어질 때, N/2마리의 폰켓몬을 선택하는 방법 중, 가장 많은 종류의 폰켓몬을 선택하는 방법을 찾아, 그때의 폰켓몬 종류 번호의 개수를 return 하도록 solution 함수를 완성해주세요.

제한사항

  • nums는 폰켓몬의 종류 번호가 담긴 1차원 배열입니다.
  • nums의 길이(N)는 1 이상 10,000 이하의 자연수이며, 항상 짝수로 주어집니다.
  • 폰켓몬의 종류 번호는 1 이상 200,000 이하의 자연수로 나타냅니다.
  • 가장 많은 종류의 폰켓몬을 선택하는 방법이 여러 가지인 경우에도, 선택할 수 있는 폰켓몬 종류 개수의 최댓값 하나만 return 하면 됩니다.

내 코드

function solution(nums) {
  let answer = 0;
  let pick = nums.length / 2;
  let set = new Set(nums);
  let setArr = [...set];
  if (setArr.length < pick) {
    answer = setArr.length;
  } else {
    answer = pick;
  }
  return answer;
}
  1. 선택할 수 있는 폰켓몬의 종류 개수의 최댓값을 구하는 문제이기 때문에 일단 처음 시작할 때, 폰켓몬을 nums.length / 2 만큼 선택할 수 있기 때문에 이렇게 값을 두었다.
  2. 최대한 다양한 종류의 폰켓몬을 뽑는 것을 구해야하기때문에 일단 중복을 없애는 방식을 택했다. set을 이용하여 중복없는 객체를 만들고 그것을 다시 [...set](전개연산자이용)을 통해 배열로 만들어 주었다.
  3. 중복이 없는 setArr의 길이가 pick보다 작을 땐 pick값만큼 선택할 수 없는 경우이기 때문에 그런 경우 setArr의 길이가 어차피 고를 수 있는 최댓값이기 때문에 setArr.length을 답으로 리턴해준다.
profile
무럭무럭 자라는 중 ∙∙∙🌱🐣

0개의 댓글