코딩 테스트 풀이/프로그래머스
[LV2] 의상
킹경후
2024. 3. 20. 10:01
문제 설명
코니는 매일 다른 옷을 조합하여 입는것을 좋아합니다.
예를 들어 코니가 가진 옷이 아래와 같고, 오늘 코니가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야합니다.
제한사항
headgear에 해당하는 의상이 yellow_hat, green_turban이고 eyewear에 해당하는 의상이 blue_sunglasses이므로 아래와 같이 5개의 조합이 가능합니다. 1. yellow_hat 2. blue_sunglasses 3. green_turban 4. yellow_hat + blue_sunglasses 5. green_turban + blue_sunglasses face에 해당하는 의상이 crow_mask, blue_sunglasses, smoky_makeup이므로 아래와 같이 3개의 조합이 가능합니다. 1. crow_mask 2. blue_sunglasses 3. smoky_makeup |
function solution(clothes) {
let ans = 1
const obj = {}
//옷 종류와 타입으로 나눈 뒤, 해시에 있다면 추가, 없다면 생성
//어차피 개수를 곱하기 때문에, 굳이 배열을 만들 필요 없이 그냥 수를 더해준다
for(let el of clothes){
const [cloth, type] = el
if(obj[type]){
obj[type]++
} else {
obj[type] = 1
}
}
//(n+1)*m가지이므로, ans에 옷 종류+1를 곱해준다
for (let val of Object.values(obj)) {
ans *= (val + 1)
}
//ans가 1에서 시작했으므로, -1
return ans - 1
}
//n가지 종류의 m가지 옷을 입는 방법 = n*m이고
//다른 종류는 안입고 한가지 종류만 입을 수 있으므로, (n+1)*m이 된다