처음 풀이하다 막힌 코드
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 |