알고리즘&자료구조(algorithm& data structure)/프로그래머스(programmers)
[프로그래머스]해시-위장 문제 풀이
바코94
2021. 1. 3. 16:36
programmers.co.kr/learn/courses/30/lessons/42578?language=javascript
코딩테스트 연습 - 위장
programmers.co.kr
1. 종류별로 구분한다.
2. 종류1 2개, 종류2 1개 인 경우를 생각해보자.
2.1 종류1에서 하나를 뽑거나 안 뽑을 수 있다. 따라서 경우의 수는 하나를 뽑는 경우는 두 가지 + 안 뽑는 경우는 1 =>3
2.2 종류2에서 하나를 뽑거나 안 뽑을 수 있다. 하나 뽑는 경우는 한 가지 + 안 뽑는 경우 1 => 2
2.3 2.1의 경우의수와 2.2의 경우의 수를 곱하면 3*2인 6이 된다.
즉, 종류 1에는 {"a","b"}, 종류 2에는 {"z"} 가 있었다고 하면 위에서 가정한 조합은 다음과 같다.
{"a", "b" , x } x {"z", "x"}. 여기서 "x"는 안 뽑은 경우
{["a","z"] , ["a","x"], ["b","z"], ["b","x"], ["x","z"], ["x","x"] } 와 같이 된다. 여기서 ["x","x"]는 하나도 선택하지 않은 경우이다.
따라서 3*2 해준 값에 -1을 해주면 하나도 선택하지 않은 경우를 뺄 수 있다.
풀이 코드
function solution(clothes) {
let obj = {}
clothes.forEach(([val, key])=>{
obj[key] = obj[key] ? [...obj[key], val] : [val]
})
let mul = 1;
for(const key in obj){
mul = mul *(obj[key].length +1);
}
return mul -1;
}