본문 바로가기
컴퓨터과학/알고리즘

[해시 알고리즘] 옷 입는 경우의 수 구하기 '위장'

by 코딩희송 2021. 10. 14.

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;

 

'컴퓨터과학 > 알고리즘' 카테고리의 다른 글

[정렬 알고리즘] h-index 구하기  (0) 2021.10.14
상호배제 알고리즘와 세마포어  (0) 2021.10.05

댓글