TodayILearned/알고리즘

위장 해쉬로 풀기 자바스크립트

tuigun 2021. 8. 16. 10:47

바로 전에 올린 '완주하지못한 선수'

2021.08.16 - [TodayILearned/알고리즘] - 완주하지 못한 선수 해쉬로 풀기 자바스크립트

와 비슷한 맥락의 문제이고,

다만 경우의 수가 합쳐져서 점화식 때문에 헷갈리게되는 문제이다.

또 문제가 대놓고 해쉬충돌이 있을테니 처리하라고 예고까지 해준다.

(그 전 위장문제도 그랬음)

function solution(clothes) {
	let key;
	const hashTable = {};
	for (let i = 0; i < clothes.length; i++) {
		key = clothes[i][1];
		if (!hashTable[key]) {
			hashTable[key] = 1;
		} else {
			hashTable[key] = hashTable[key] + 1;
		}
	}

	let result = 1;

	for (key in hashTable) {
		console.log(hashTable[key]);
		result = (hashTable[key] + 1) * result;
	}
	return result - 1;
}

solution([
	["yellowhat", "headgear"],
	["bluesunglasses", "eyewear"],
	["green_turban", "headgear"],
]);
  • 존재하는 경우의 수는 종류별로 옷을 섞어입는 경우 + 아이템 하나만 착용하는 경우이다.
  • {headgear : 2, eyewear:1} 일 경우, 섞어입는 경우와 단독 아이템 착용의 경우를 모두 따져주기 위해서
  • {headgear : [yellowhat,greenhae,none], eyewear: [bluesunglasese, none]} 처럼 아무것도 없는 경우까지 합해서 점화식을 세워준다. 단, none + none 조합을 제외한 점화식을 세운다.