알고리즘 이론 & 풀이/프로그래머스

프로그래머스 Lv.1 | 폰켓몬 js

페블_ 2023. 8. 8. 13:24

문제

https://school.programmers.co.kr/learn/courses/30/lessons/1845

 

이 문제의 유형은 '해시'이다. 해시란 key: value의 쌍으로 값을 관리하는 것이다.

js에서는 해시를 구현할 때 Map obbject를 이용한다.

 

그런데 이 문제는 최빈값을 구하는 것처럼 각 요소가 몇 번 나오는지 세는 게 중요한게 아니고, 얼마나 다양한 종류의 폰켓몬을 고를 수 있는지가 중요하다. 즉, key만 중요하기 때문에 중복을 제거한 배열을 만들면 굳이 Map을 만들어 value까지 셀 필요가 없다는 말이다.

 

풀이

  1. 중복을 제거해 폰켓몬의 종류만 남긴다.
  2.  중복제거.length보다 골라야 하는 폰켓몬 수(N/2)가 작거나 같다면 N/2를 모두 다른 종류로 채울 수 있으므로 N/2 종류를 고를 수 있다.
  3. 중복제거.length보다 N/2가 크다면 중복제거.length만큼 종류를 고른 다음 나머지는 이미 골랐던 종류로 채우면 되기 때문에 총 중복제거.length 종류를 고를 수 있다.
function solution(nums) {
    const nonDup = nums.filter((item, i) => nums.indexOf(item) === i);
    if(nonDup.length >= nums.length / 2) {
        return nums.length / 2;   
    } else {
        return nonDup.length;
    }
}