2차 공부/알고리즘

의상

공대탈출 2024. 7. 24. 20:25

프로그래머스 - 의상

 

처음 풀이하다 막힌 코드

function solution(clothes) {
    var answer = 0;
    let clothesMap = new Map()
    console.log(clothes)
    for (let item of clothes) {
        let name = item[0]
        let type = item[1]
        clothesMap.has(type) ? 
            clothesMap.set(type, [...clothesMap.get(type), name]) : clothesMap.set(type, [name])
    }
    console.log('clothesMap= ', clothesMap)
    let clothesKindArr = Array.from(clothesMap.values()).map((item) => item.length)
    console.log('clothesKindArr= ', clothesKindArr)
    //몇 가지 종류를 착용할건지, 1부터
    for (let i = 1; i<=clothesKindArr.length; i++) {
        //몇가지 종류를 착용한다 했을 때 경우를 세는법
        //1일 때, 1가지 배열 씩 길이 * 1
        //2일 때, 2가지 배열 씩 길이 * 길이
        //3일 때, 3가지 배열 씩 길이 * 길이 * 길이
        
        //해당 반복마다의 경우를 answer에 더하기
        answer += ''
    }
    return answer;
}
//[5, 3, 2, 1, 6] // 5

clothesMap에 의상 종류에 따라 분류하여 배열속으로 의상을 넣고, 해당 Map에서 values의 길이를 따와 각각 clotheskindArr에 넣어주었다.

그리고 각 요소를 몇종류를 입을거냐에 따라 곱하여 answer에 더해주면 되는데, 그걸 어떻게 코드를 짜야할지 생각이 안났다.

공대를 나왔는데 왜 수학을 못하는걸까

 

해결한 코드

function solution(clothes) {
    var answer = 1;
    let clothesMap = new Map()
    for (let item of clothes) {
        let name = item[0]
        let type = item[1]
        clothesMap.has(type) ? 
            clothesMap.set(type, [...clothesMap.get(type), name]) : clothesMap.set(type, [name])
    }
    let clothesKindArr = Array.from(clothesMap.values()).map((item) => item.length)
    //각 종류의 경우의 수를 answer에 곱해준다.
    for (let i = 0; i<clothesKindArr.length; i++) {
        //해당 종류의 옷을 입지 않는 경우도 포함하여 1을 더함
        answer *= (clothesKindArr[i] + 1)
    }
        //모든 옷을 입지 않는 경우 제외
    return answer - 1;
}
//[5, 3, 2, 1, 6] // 5

생각보다 쉬웠다. 초기 answer을 1로 정하고, 각 종류의 경우의수+1(안입는경우)를 answer에 모두 곱해주면 되는 것이었다.

그리고 마지막으로 return할 때에 모든 종류의 옷을 입지 않는 경우를 제외하여 1을 빼주면 되는 것이었다.

진짜 왜 다 풀어놓고 저걸 생각을 못했을까...

'2차 공부 > 알고리즘' 카테고리의 다른 글

앞으로의 알고리즘은 깃허브로  (0) 2024.07.24
할인 행사  (0) 2024.07.23
n^2 배열 자르기  (0) 2024.07.19
괄호 회전하기  (0) 2024.07.17
이진 변환 반복하기  (0) 2024.07.09