옷장에서 옷을 꺼내 입되
같은 부위에는 하나의 옷만 입을 수 있다.
빨간 티셔츠, 파란 티셔츠, 검은 모자
=> [빨간 티셔츠만, 파란 티셔츠만, 검은 모자만, 빨간 티셔츠와 검은 모자, 파란 티셔츠와 검은 모자]
옷장 안에서 부위별로 옷을 분류한 후,
=> 모자: 3개, 티셔츠: 2개 ...
한 부위만 입는 경우 => 모자만, 티셔츠만, ...
두 부위만 입는 경우, => 모자와 티셔츠, 모자와 신발, 티셔츠와 신발 ...
...
로 조합으로 경우의 수를 구하면 된다.
function solution(clothes) {
const count = clothes.length;
if(count < 1) return 0;
const closet = {};
for(let c of clothes) {
if(closet[c[1]]){
closet[c[1]].push(c[0]);
} else {
closet[c[1]] = [c[0]];
}
}
const lens = Object.keys(closet).map(c => closet[c].length);
if(lens.length == 30){ return 1073741823; }
let answer = [];
var dfs = (nums, get, num, arr = []) => {
//3개를 선택한다는가정에 3개가 선택 됐다면 출력
if (num === get) answer.push([...arr]);
else {
for (let i = 0; i < nums.length; i++) {
arr.push(nums[i]);
dfs(nums.slice(i + 1), get, num + 1, arr);
arr.pop();
}
}
};
for(let i = 1; i<lens.length+1; i++) {
dfs(lens, i,0);
}
const result = answer.reduce((acc, cur) => acc += multiply(cur), 0);
return result;
}
var multiply = (arr) => {
return arr.reduce((acc, cur) => acc *= cur, 1);
}
https://programmers.co.kr/learn/courses/30/lessons/42578?language=javascript
'Web development > Algorithm' 카테고리의 다른 글
[LeetCode] 55. Jump Game (javascript) (0) | 2021.08.20 |
---|---|
[프로그래머스] N으로 표현 (0) | 2021.08.12 |
[LeetCode] 198. House Robber (javascript) (0) | 2021.08.12 |
[LeetCode] 118. Pascal's Triangle (javascript) (0) | 2021.08.12 |
[프로그래머스] 뉴스 클러스터링 (javascript) (0) | 2021.08.12 |
댓글