본문 바로가기

Algorithm/기타사이트

위장

분류 : 해시

문제

프로그래머스 - 해시 - 위장

programmers.co.kr/learn/courses/30/lessons/42578?language=javascript

 

문제 풀이

  1. 각 옷의 타입별로 몇가지의 옷들이 있는지 기록한다.
    => 각 옷의 타입을 key 로 하는 해시맵을 만들면 된다.
  2. 해당 옷으로 만들 수 있는 경우의 수를 구한다.

경우의 수를 구하는 것도 매우 간단하다. 각 옷 종류의 개수 + 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