728x90
문제설명
스파이들은 매일 다른 옷을 조합하여 자신을 위장합니다.
예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동근란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날에는
청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다.
종류 | 이름 |
얼굴 | 동그란 안경, 검정 선글라스 |
상의 | 파란색 티셔츠 |
하의 | 청바지 |
겉옷 | 긴 코트 |
스파이가 가진 의상들이 담긴 2차열 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 만들어 주세요
제한사항
- clothes의 각 행은 [의상의 이름, 의상의 종류] 로 이루어져 있습니다.
- 스파이가 가진의 상의 수는 1개 이상 30개 이하여야 합니다.
- 같은 이름을 가진 의상은 존재하지 않습니다.
- clothes의 모든 원소는 문자열로 이루어져 있습니다.
- 모든 문자열의 길이는 1이상 20이하인 자연수 이고 알파벳 소문자 또는 "_"로만 이루어져 있습니다.
- 스파이는 하루에 최소 한 개의 의상은 입습니다.
풀이
같은 이름을 가진 의상의 존재 X -> 의상의 이름을 고려하지 않아도 된다.
하루에 최소 한가지 의상은 입는다 -> 아예 입지 않는 경우는 제거가 필요하다.
function solution(clothes) {
const len = clothes.length; // 상수 len 값으로 옷의 length 길이 값을 선언
let answer = 1; // answer 값의 초기값을 1로 선언
let obj = {}; // obj로 빈 객체를 선언해준다.
for (let i =0 i<len; i++) {
obj[clothes[i][1]] = (obj[clothes[i][1]] || 1) + 1;
}
for (let key in obj) {
answer *= obj[key]
}
return answer -1;
}
- 먼저 의상의 종류를 key값으로, 해당 종류의 포함될 의상 개수를 value로 선언하는 obj를 생성해 빈객체로 담아준다.
- 해당 종류를 입지 않는 경우도 계산하기 위해서 value기본 값을 1로 지정
- 의상의 종류별로 모든 조합의 수를 곱하고, 아무것도 입지 않는 상태를 뺴기 위해 anser 값의 -1을 해준다.
참고 자료
'etc. > Algorithm' 카테고리의 다른 글
[알고리즘 테스트 대비] 사분면 고르기 (0) | 2022.01.17 |
---|---|
[알고리즘 테스트] 완주하지 못한 선수 (0) | 2022.01.13 |
[알고리즘 테스트] 부족한 금액 계산하기 (0) | 2022.01.13 |