[프로그래머스] level 2 위장 (JS)

김승현·2023년 3월 1일
0

문제 링크 : 코딩테스트 연습>해시>위장



제한사항

  • clothes : [의상 이름, 의상 종류]로 이루어진 2차원 배열
  • 스파이가 가진 의상의 수는 1개 이상 30개 이하입니다.
  • 같은 이름을 가진 의상은 존재하지 않습니다.
  • clothes의 모든 원소는 문자열로 이루어져 있습니다.
  • 모든 문자열의 길이는 1 이상 20 이하인 자연수이고 알파벳 소문자 또는 '_' 로만 이루어져 있습니다.
  • return : 서로 다른 옷의 조합의 수
  • 최소 하루에 한 개의 의상 입는다.

풀이

EX)
[["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]

  1. 각 의상 종류 중 1개 선택할 수 있는 경우의 수 + 1(선택 안할 경우)
    • headgear : 2 + 1 / eyewear : 1 + 1
  2. 각 의상 종류의 경우의 수 곱한다.
    • 3 * 2 = 6
  3. 전부 선택 하지 않을 경우 빼기
    • 6 -1 = 5

코드

function solution(clothes) {
    let answer = 1;
    let obj = {}
    clothes.forEach(cloth => obj[cloth[1]] = (obj[cloth[1]] | 0) + 1)

    let values = Object.values(obj);

    // 각 의상 종류중 1개 선택할 수 있는 경우의 수 + 1(선택 안할 경우)
    values.forEach(value => answer *= (value + 1))

    // 모두 선택 안할 경우 빼기
    return answer - 1;
}
profile
개발자로 매일 한 걸음

0개의 댓글