https://school.programmers.co.kr/learn/courses/30/lessons/42578
조합을 구하는 문제.
어렵지 않지만 어려운 문제라고 할 수 있을까.
정말 쉽게 풀 수 있고, 빙빙 둘러 어렵게 풀 수도 있다.
그리고 난 빙빙 둘러 가는 접근을 선택했기 때문에 이 글을 통해 메모하려는 목적도 있다.
일단 이 문제는 조합을 구하는 문제 이긴 하지만,
조합 그 자체를 구하는 문제는 아니다.
그래서 조합이 총 몇 개인지 넘겨주면 된다.
따라서 조합을 구할 필요가 애초에 없었다.
하... 근데 조합 문제만 나오면 쫄아버리는 탓에 제대로 생각하지 못한 것 같다.
일단 완성된 코드는 다음과 같다.
function solution(clothes) {
const clothesMap = new Map();
// 의상 종류별 분류
clothes.forEach(([item, category]) => {
if (!clothesMap.has(category)) {
clothesMap.set(category, 0);
}
clothesMap.set(category, clothesMap.get(category) + 1);
});
// 전체 곱 계산
let combinations = 1;
clothesMap.forEach((count) => { // forEach의 인자는 (value, key, map)
combinations *= (count + 1); // 입지 않는 경우 포함
});
// 모든 의상을 입지 않는 경우 제외
return combinations - 1;
}
그냥 각 Key들의 Value들을 곱하기만 하면 끝이었다.
하지만 이걸 생각조차 할 수 없었으니 문제다.
조합 문제가 나왔기 때문에, 일단 이런 흐름이 됐다.
- 아 조합인데? 좀 그런데?
- 개수를 구하는 거네...
- 일단 조합을 구하면서 결과가 나올 때마다 1씩 더하자
- 맘처럼 잘 안 돼서 멍...
그래서 일단 정신을 좀 차리고...
조합을 구하는 문제가 아닌 그 수를 구하는 문제라는 것에 집중했다.
그럼 당연히 모든 값을 다 곱하면 끝나는 일이었다.
부위 하나 정돈 입지 않는 선택지도 있었기 때문에 각 카운트에 1씩 더해줬다.
그리고 최소 하나는 입는다고 했기 때문에 전부 입지 않는 경우인 1을 빼줬다.
그럼 끝이다.
조합 문제에 쫄지 않으려면 많이 풀어봐야 하는 게 당연하겠지...
'Camp > T.I.L.' 카테고리의 다른 글
[TIL #14] k진수에서 소수 개수 구하기 (0) | 2024.09.23 |
---|---|
[TIL #13] 피로도 (0) | 2024.09.20 |
[TIL #11] 행렬의 곱셈 (0) | 2024.09.12 |
[TIL #10] n^2 배열 자르기 (0) | 2024.09.11 |
[TIL #9] 로그인 / 비로그인 구분 (0) | 2024.09.10 |