한 걸음씩

[프로그래머스][JS] 의상 본문

Programmers

[프로그래머스][JS] 의상

winter17 2023. 8. 15. 21:14

https://school.programmers.co.kr/learn/courses/30/lessons/42578

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이 과정

function solution(clothes) {
    let obj = {}
    for (let i = 0; i < clothes.length; i++){
        const cloth = clothes[i]
        if (obj[cloth[1]]){
            obj[cloth[1]]++
        }else{
            obj[cloth[1]] = 1
        }
    }
    // console.log(obj)
    
    // 각 종류 별로 최대 1가지 의상만 착용 가능 => +1은 해당 종류의 의상을 입지 않는 경우
    const value = Object.values(obj).map(item => item + 1).reduce((acc, cur) => acc * cur, 1)
    // console.log(value)
    
    // 최소 한 개의 의상은 입어야 한다 => 아무것도 입지 않는 경우 빼야함(-1)
    return value - 1;
}

문제에서 주어진 조건은 2가지

1. 각 종류별로 최대 1가지 의상만 착용할 수 있다

2. 하루에 최소 한 개의 의상을 입는다. → 아무것도 입지 않는 경우는 없다

위의 조건을 만족하는 서로 다른 옷의 조합의 수를 계산해야 한다.

 

clothes = [["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]일 때,

obj = { headgear: 2, eyewear: 1 }

value = (2 + 1) * (1 + 1) : 여기서 +1은 해당 종류의 의상을 입지 않는 경우를 체크한 것

마지막에 value에 -1을 했는데 -1은 아무것도 입지 않는 경우를 빼준 것 

 


리뷰

완전 수학문제였는데 조합은 약한 부분이라 도움이 좀 필요했다.