컴퓨터과학/알고리즘
[해시 알고리즘] 옷 입는 경우의 수 구하기 '위장'
코딩희송
2021. 10. 14. 14:45
N(= 착용하는 경우의 수) + 1(=착용하지 않는 경우) * 옷 타입 개수 - 1(=모두 착용하지 않는 경우)
예)
모자: 2, 안경:1일경우,
착용하지 않았을 경우의 수: (2+1) * (1+1)
모두 착용하지 않았을 경우를 제외하기 위해 마지막에 1을 빼줌.
(무조건 하나 이상은 걸친다고 했으므로)
- 입력값:
[["yellowhat", "headgear"], ["bluesunglasses", "eyewear"], ["green_turban", "headgear"]]
1. 해시 키-값 맵 역전 방식을 이용한 뒤 키 중복 여부를 체크해서 카운트를 계산해줌.
const getTypeCount = clothes.reduce((cloth, [value, key])=>{
cloth[key] = cloth[key] ? cloth[key] + 1 : 1;
return cloth;
},{})
//=> {headgear:2, eyewear:1}
2. Object.values()를 감싸서 값만 추출하기
const getTypeCount = Object.values(cloths.reduce(...))
//=> [2, 1]
3. 옷의 개수를 forEach문으로 하나씩 받아와서 +1처리 해주고 곱의 법칙을 이용하여 계산해준 후 마지막으로 아무것도 입지 않았을 경우의 수를 제외해준다.
let result = 1;
getTypeCount.forEach((e)=> result *= e+1);
return result - 1;