TIL | WIL

5/9 화 [프로그래머스] 해시(Hash), 폰켓몬 TIL

깊은바다거북 2023. 5. 9. 15:05

[프로그래머스] 해시 > 폰켓몬

나의 풀이:

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