[프로그래머스] Lv.1 폰켓몬 (JavaScript)

혜린·2022년 3월 6일
0
post-thumbnail

🔐 문제

N마리 폰켓몬의 종류 번호가 담긴 배열 nums가 매개변수로 주어질 때, N/2마리의 폰켓몬을 선택하는 방법 중, 가장 많은 종류의 폰켓몬을 선택하는 방법을 찾아, 그때의 폰켓몬 종류 번호의 개수를 return 하도록 solution 함수를 완성해주세요.

  • 제한조건
    • 가장 많은 종류의 폰켓몬을 선택하는 방법이 여러 가지인 경우에도, 선택할 수 있는 폰켓몬 종류 개수의 최댓값 하나만 return 하면 됩니다.

  • Example
    • 입출력 예 #1
      • [3, 1, 2, 3]의 4마리 중 2마리의 폰켓몬을 선택할 수 있습니다.
      • 가장 많은 종류의 폰켓몬을 선택하는 것으로, 중복된 번호의 폰켓몬은 필요하지 않습니다.
      • 중복된 값을 제거하면 [1, 2, 3] 이지만, 어차피 2마리 밖에 선택하지 못하므로 가장 많은 종류의 폰켓몬을 선택하는 방법은 2마리가 되어 2를 return합니다.
      • 여기서 알 수 있는 점 : 폰켓몬이 담긴 배열 nums에서 중복을 제거했을 때의 길이와 N/2의 값을 비교해주어야 한다는 것!


🔑 풀이

function solution(nums) {
    let tmp = nums.sort().filter((v, i) => nums[i] !== nums[i+1]);
    return (nums.length / 2) < tmp.length ? nums.length / 2 : tmp.length;
}

📍 풀이과정

  1. 폰켓몬이 담겨있는 nums 배열을 정리해줍니다.
    • sort()로 오름차순 정렬 해주기
    • filter()로 중복된 값 제거해주기

  2. nums에서 중복된 값들이 제거된 tmp의 길이와 내가 선택할 수 있는 폰켓몬의 수인 N/2를 비교해줍니다.
    • 내가 선택할 수 있는 폰켓몬의 수는 N/2가 최대입니다.
    • 따라서tmp의 길이가N/2보다 크면 N/2가 내가 고를 수 있는 최대값이 됩니다.
    • tmp의 길이가N/2보다 작으면, 그대로 tmp의 길이가 내가 고를 수 있는 최대값이 됩니다.

profile
FE Developer

0개의 댓글