출처 - 프로그래머스 코딩테스트 고득점 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' }
를 반환한다.