728x90
경우의 수와 관련된
수학문제
function solution(clothes) {
let answer = 1;
let obj = {};
for(var i=0; i < clothes.length; i++) {
if(obj[clothes[i][1]] >= 1) {
obj[clothes[i][1]] += 1;
} else {
obj[clothes[i][1]] = 1;
}
}
for (let key in obj) {
answer *= (obj[key]+1);
}
return answer - 1;
}
1. 객체에 해당 옷의 종류가 없으면 1
2. 객체에 해당 옷의 종류가 있으면 기존값 + 1
3. 경우의 수 계산을 위해 종류별로 곱해나가는데 (곱의 법칙), 해당 종류의 옷을 안입는 경우의 수도 존재하니 +1하여 곱한다.
4. 3번에 옥의티로 저렇게하면 모든 옷을 안입은 경우의 수가 발생하게 되는데 문제에서 아무것도 안입는 경우는 없다고 했으므로 마지막에 -1을 해준다.
* 한걸음 더 나아가 생각해보기
만약에, 문제에 모든 종류의 옷을 반드시 한가지씩 입어야한다는 조건이 붙는다면?
function solution(clothes) {
let answer = 1;
let obj = {};
for(var i=0; i < clothes.length; i++) {
if(obj[clothes[i][1]] >= 1) {
obj[clothes[i][1]] += 1;
} else {
obj[clothes[i][1]] = 1;
}
}
for (let key in obj) {
answer *= obj[key];
}
return answer;
}
1. 해당 종류의 옷을 안입는 경우를 제외
2. 위의 코드에서 모든 종류의 옷을 안입는 경우는 발생하지 않으므로 마지막에 -1도 제외
728x90
반응형
'개발, 코딩 > 알고리즘 공부' 카테고리의 다른 글
[백준] 재귀 - 팩토리얼 (0) | 2022.02.03 |
---|---|
JS. stack 구현 (배열없이) (0) | 2021.12.16 |
[알고리즘] 프로그래머스, 모의고사 (0) | 2021.11.02 |
[알고리즘] 프로그래머스, 베스트앨범 (0) | 2021.11.01 |
[알고리즘] 프로그래머스, 완주하지 못한 선수 (0) | 2021.11.01 |