-
폰켓몬 (알고리즘)알고리즘 2021. 8. 28. 18:01
내 풀이법
문제해석
박사님이 갖고 있는 폰켓몬 중 절반을 가져갈 수 있습니다. 그 중 최대 고를 수 있는 포켓몬 종류의 수를 구하세요!
내가 생각한 풀이법
- 배열 내(박사님이 갖고 있는 폰켓몬)에 중복되는 종류를 삭제한다. -> Set() 값을 구하자
- 중복되지 않은 폰켓몬들의 수와 내가 최대 고를 수 있는 수를 비교하며 값 도출
나의 코드
function solution(nums) { const set = new Set(nums); const type = [...set]; const limit = nums.length / 2; let answer = 0; type.length >= limit ? (answer = limit) : (answer = type.length); return answer; }
코드특징
const set = new Set()
해당 값은 Set 오브젝트를 리턴하기에 손쉽게 배열 구조로 값을 넣기에let type = [...set]
구조 분해 할당 문법을 사용type
값이limit
보다 크거나 동일하면answer = limit
만약 아니면answer = type.length
성능
다른사람 풀이 #1
function solution(nums) { var answer = 0; var arr = []; nums.forEach(a=>{ if(!arr.includes(a)) { arr.push(a); } }); return arr.length < nums.length/2 ? arr.length : nums.length/2; }
코드특징
- new Set() 대신 filter을 사용
성능
성능특징
- filter을 사용하는 것이 오히려 성능 감소로 이어졌다!
- reduce로 사용한 풀이 방법도 filter와 비슷한 풀이시간이 나와 new Set() 사용하는 것보다 성능이 낮은 것은 확인했다
오늘 배운 점
- 오브젝트 생성을 하면 성능이 안좋아질 것이라 생각했지만, 오히려 성능이 더 좋게 나와 놀랐다. 이제부터 new Set()를 필요시 거리낌 없이 잘 사용할 수 있을 것 같다!