[프로그래머스] 해시 > 폰켓몬
나의 풀이:
function solution(nums) {
// nums / 2와, 폰켓몬 종류 수 중에서
// 폰켓몬 종류 수 < mums / 2면 종류 수를 반환하고
// 그게 아니면 nums / 2 값을 반환한다.
if (nums.length % 2 !== 0) {
console.log('nums의 길이가 짝수가 아닙니다');
return;
}
if (nums.length > 10000) {
console.log('nums의 길이가 10,000을 넘어갑니다');
return;
}
const map = new Map();
nums.forEach((type) => {
// map.set(type, (map.get(type) ?? 0) + 1); // 사실 종류별 개수를 기록할 필요도 없다.
map.set(type, 0);
});
return nums.length / 2 < map.size ? nums.length / 2 : map.size;
}
// Set을 이용하기:
function solution2(nums) {
const max = nums.length / 2;
const set = new Set(nums);
return set.size > max ? max : set.size;
}
테스트 코드:
//
const { solution } = require('./104-해시-폰켓몬');
describe('Ponkemon', () => {
[
{ nums: [1, 3], result: 1, },
{ nums: [1, 1], result: 1, },
{ nums: [3, 2, 1, 1], result: 2, },
{ nums: [1, 1, 1, 1], result: 1, },
{ nums: [3, 1, 2, 3], result: 2, },
{ nums: [3,3,3,2,2,4], result: 3, },
{ nums: [3,3,3,2,2,2], result: 2, },
{ nums: [3,3,3,3,3,3], result: 1, },
]
.forEach(({ nums, result }) => {
it(`should return ${result} when given array is [${nums}]`, () => {
expect(solution(nums)).toBe(result);
})
})
})
알게된 것:
new Set()
에 배열 그대로를 넣어줄 수 있다.
※ 위 내용은 스스로 공부하며 적어둔 노트이며 불확실한 내용이 있을 수 있습니다. 학습용으로 적합하지 않음을 유념해주세요. ※
Uploaded by N2T