분류 : 해시
문제
프로그래머스 - 해시 - 위장
programmers.co.kr/learn/courses/30/lessons/42578?language=javascript
문제 풀이
- 각 옷의 타입별로 몇가지의 옷들이 있는지 기록한다.
=> 각 옷의 타입을 key 로 하는 해시맵을 만들면 된다. - 해당 옷으로 만들 수 있는 경우의 수를 구한다.
경우의 수를 구하는 것도 매우 간단하다. 각 옷 종류의 개수 + 1 한 값을 모두 곱해준다음에 1을 빼면 된다.
상의 3종류, 하의 2종류, 모자 2 종류가 있다고 하자.
A1, A2, A3 , B1, B2, C1, C2
다.
이때 각각의 타입에서 하나씩 고를 수가 있다. 하지만 꼭 모든 옷을 선택해야 하는 것은 아니므로, 각 옷의 타입에는 선택하지 않는 경우도 들어간다. 즉 아래 처럼 각 타입마다 한가지 종류(옷 선택 안함)이 있다고 생각하면 된다.
A1, A2, A3, AX , B1, B2, BX , C1, C2, CX
4 X 3 X 3 = 24
종류의 옷 조합 경우가 생긴다.
그러나 이 경우에는 (AX, BX, CX)
도 포함되어 있다. 저 조합은 어떤 타입의 옷도 선택하지 않은 경우이기 때문에 빼줘야 한다. 즉, 4 X 3 X 3 - 1
이 된다. 이걸 그대로 구현하면 된다.
구현 설명
풀이에 설명한대로 각 옷의 타입을 key 로 두고, value 에는 옷의 개수를 넣어주면 된다.
맵은 그냥 object 를 사용했다. javascript 의 map 을 이용해도 된다.
Map 과 Object 의 차이가 궁금하다면 다음 글을 읽어보자.
developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Keyed_collections
코드
function solution(clothes) {
const clothesType = {};
clothes.forEach(clothe => {
const type = clothe[1];
if(!clothesType[type]) {
clothesType[type] = 0;
}
clothesType[type]++;
})
let ans = 1;
for(let key in clothesType) {
ans *= (clothesType[key]+1);
}
ans--;
return ans;
}
'Algorithm > 기타사이트' 카테고리의 다른 글
프로그래머스 - 타겟 넘버 (0) | 2021.11.24 |
---|---|
Gridland Metro (0) | 2020.08.18 |
Lily's Homework (0) | 2020.07.27 |
[Hackerrank] - Maximum Palindromes (0) | 2020.07.18 |