2026.3.26.
https://school.programmers.co.kr/learn/courses/30/lessons/42578
각 카테고리의 아이템마다 "선택함 / 선택하지 않음" 두 가지 경우의 수
-> (카테고리별 아이템 수 + 1)을 전부 곱하고, 아무것도 안입은 것은 제외하기 위해 -1
function solution(clothes) {
const map = new Map();
for (let cloth of clothes) {
if (!map.has(cloth[1])) {
map.set(cloth[1], [cloth[0]]);
} else {
const arr = map.get(cloth[1]);
map.set(cloth[1], [...arr, cloth[0]])
}
}
const arr = Array.from(map.values());
const answer = arr.reduce((acc, cur) => {
const available = cur.length + 1;
return acc * available;
}, 1) - 1;
return answer;
}
function solution(clothes) {
const map = new Map();
for (let cloth of clothes) {
map.set(cloth[1], (map.get(cloth[1]) || 0) + 1);
}
const answer = [...map.values()].reduce((acc, cur) => acc * (cur + 1), 1) - 1;
return answer;
}
아이템 이름은 사용하지 않고, 타입별 아이템 개수만 필요하므로, 개수만 저장하도록 구현 = 로직이 단순해짐
has, get, set 메서드가 존재하는 자료 구조!for ... in 이 아닌, for ... of 를 써야 함reduce 함수 파라미터는 acc, cur 순서이고, 화살표 함수로 작성하지 않았으면 return 잊지 말고, 초기값 설정 잊지말자. 이 문제는 '곱하기'를 해야 하는데, 초기값을 관성적으로 0으로 설정했다가 계속 -1이 출력되는 해프닝이 있었음.