-
[Javascript] 프로그래머스 - 위장알고리즘, 자료구조/프로그래머스 2022. 9. 19. 22:22
문제: https://school.programmers.co.kr/learn/courses/30/lessons/42578?language=javascript#
문제요약
- 스파이는 위장을 위해 매일 다른 옷을 조합하여 입어야 한다. 서로 다른 옷의 조합의 수를 구하여라.
- 스파이는 하루에 최소 1개 이상의 의상을 입는다.
- clothes는 2차원 배열이며, 원소는 [의상의 이름, 의상의 종류]로 구성된다.
- 스파이가 가진 의상의 수는 1개 이상 30개 이하이며, 의상의 이름은 고유하다.
풀이과정
function solution(clothes) { let answer = 1; // 종류별로 의상 개수 카운팅 const clothesObj = clothes.reduce((prev, curr) => { prev[curr[1]] = (prev[curr[1]] || 1) + 1; return prev; }, {}); // 각 종류의 의상 개수를 곱해준다 for (let key in clothesObj) { answer *= clothesObj[key]; } // 아무것도 착용하지 않는 경우는 없으므로, -1을 해준다 return answer - 1; };
그림으로 그리면 아래와 같다. key는 의상 종류의 이름이고 value는 해당 종류에 속하는 의상의 이름들로 이루어진 배열이다. 각 배열에는 의상의 이름만 있는게 아니다. 해당 종류의 의상을 입지 않는 경우도 포함한다. 이렇게 구성된 각 배열의 길이(= 종류별 의상 개수)를 서로 곱한다. 최종적으로 곱한 값에서 -1을 해야한다. 아무 의상도 착용하지 않은 경우는 없기 때문이다. (문제 조건에서 최소 1개 이상의 의상을 입는다고 되어있다)
'알고리즘, 자료구조 > 프로그래머스' 카테고리의 다른 글
[Javascript] 프로그래머스 - 피로도 (0) 2023.04.16 [Javascript] 프로그래머스 - 올바른 괄호 (2) 2022.09.20 [Javascript] 프로그래머스 디스크 컨트롤러 (0) 2021.03.24 프로그래머스 알고리즘 복습하기 (0) 2020.08.04 [Javascript] 프로그래머스 보석 쇼핑 (0) 2020.07.10