개발공부/Problem Solving

[프로그래머스 고득점 Kit] 위장

개발자 찐빵이 2022. 1. 5. 08:37
728x90
 

코딩테스트 연습 - 위장

 

programmers.co.kr

요구사항

의상 이름, 의상 종류로 이루어진 2차원 배열이 들어왔을 때
서로 다른 옷의 조합 수를 구한다.

주의사항

  • 같은 종류의 의상을 입을 수 없다. 종류는 1가지씩!
  • 최소 한 개의 의상을 입는다.
  • 이름이 같은 의상은 없다.

코드

'usestrict';

function calculateCombination(hashmap) {
  let result = 1;

  hashmap.forEach((element) => {
    result *= element + 1;
  });

  return result - 1;
}

function setHashmap(array) {
  let hashMap = new Map();

  array.forEach((element) => {
    let key = element[1];

    if (hashMap.get(key) == undefined) {
      hashMap.set(key, 1);
    } else {
      hashMap.set(key, hashMap.get(key) + 1);
    }
  });

  return hashMap;
}

function solution(clothes) {
  let clothHashmap = setHashmap(clothes);
  return calculateCombination(clothHashmap);
}

clothHashmap은 의상 종류를 Key로 하고, 개수를 Value로 하는 map이다.
의상 조합을 구할 때 의상을 입지 않을 경우가 있기 때문에 의상 종류의 개수 + 1을 곱한다.
최소 한 개의 의상을 입기 때문에 아무것도 입지 않은 경우(1개)를 뺀다.

복잡도

시간복잡도 : O(N)
공간 복잡도 : O(1)??

후기

저번 문제와 달리 hash를 사용해서 풀었다.

Combination 구하는걸 조금 헤맸다.
조합에 대해 공부가 필요하다.

반응형