
출처 - 프로그래머스 코딩테스트 고득점 KIT
모자 3개, 상의 2개, 하의 2개, ….모자1, 모자2, 모자3, 모자를 고르지 않는 경우로 총 4가지 경우가 나온다. 모자를 고르지 않는 경우 & 상의를 고르지 않는 경우 & 하의를 고르지 않는 경우가 여기에 해당한다.function solution(clothes) {
let answer = 1;
// step 1. 해시맵을 생성한다.
let sH = new Map;
// step 2. 주어진 의상을 해시맵에 매핑한다.
for (let [value, key] of clothes) {
sH.set(key, sH.get(key) + 1 || 1);
}
// step 3. 해시맵의 원소들을 순회하며 경우의 수를 곱한다.
for (let [key, value] of sH) {
// console.log(`${key}는 ${value}개 있다!`)
answer *= (value + 1);
}
// step 4. 전체 경우에서 1을 뺀 값을 정답으로 출력한다.
answer -= 1;
return answer;
}
function solution(clothes) {
// STEP 1. 주어진 의상 배열을 순회하며 각 의상을 종류별로 분류해 해시맵에 맵핑한다.
let cH = new Map();
for (let [item, type] of clothes) {
cH.set(type, cH.get(type) + 1 || 1);
}
// STEP 2. 해시맵을 순회하며 각 종류별로 옷을 고르는 경우의 수를 구해 곱한다.
let answer = [...cH.values()].reduce((acc, cur) => {
return acc * (cur + 1);
}, 1);
// STEP 3. 모든 경우의 수에서 아무것도 입지 않는 경우 한 가지를 뺀다.
answer = answer - 1;
return answer;
}
.keys(), .values()로 값들을 반환할 수 있다. Object.keys(myObj) / myMap.keys() 모양에 주의해서 보자. Object.keys()가 array를 반환하는 것과 달리, Map.keys()는 Map Iterator 라는 Object를 반환한다. MapIterator {'key1', 'key2'} 를 반환한다.
[Map Iterator] { 'key1', 'key2' } 를 반환한다.