문제
https://school.programmers.co.kr/learn/courses/30/lessons/1845
이 문제의 유형은 '해시'이다. 해시란 key: value의 쌍으로 값을 관리하는 것이다.
js에서는 해시를 구현할 때 Map obbject를 이용한다.
그런데 이 문제는 최빈값을 구하는 것처럼 각 요소가 몇 번 나오는지 세는 게 중요한게 아니고, 얼마나 다양한 종류의 폰켓몬을 고를 수 있는지가 중요하다. 즉, key만 중요하기 때문에 중복을 제거한 배열을 만들면 굳이 Map을 만들어 value까지 셀 필요가 없다는 말이다.
풀이
- 중복을 제거해 폰켓몬의 종류만 남긴다.
- 중복제거.length보다 골라야 하는 폰켓몬 수(N/2)가 작거나 같다면 N/2를 모두 다른 종류로 채울 수 있으므로 N/2 종류를 고를 수 있다.
- 중복제거.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;
}
}
'알고리즘 이론 & 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 Lv.1 | 전화번호 목록 js (0) | 2023.08.08 |
---|---|
프로그래머스 Lv.1 | 완주하지 못한 선수 js (0) | 2023.08.08 |
프로그래머스 Lv.0 | 영어가 싫어요 js (0) | 2023.08.06 |
프로그래머스 Lv.0 | 소인수분해 (0) | 2023.07.19 |
프로그래머스 Lv.0 | 이진수 더하기 (0) | 2023.07.09 |