[lv2] 위장

걸음걸음·2023년 2월 25일
0

Test

목록 보기
9/29

문제링크

  • 의상이 담긴 2차원 배열 clothes [[의상의 이름, 의상의 종류], ...]
  • 중복되는 이름은 없음
  • 하루에 최소 한 개의 의상을 착용
  • 서로 다른 옷의 조합의 수 return

n차식 계수들의 합
설명 링크
옷의 종류가 1이고 개수가 a일 때 > a가지 경우
옷의 종류가 2이고 개수가 a, b일 때 > a, b, ab > (a+b) + (ab)가지 경우
옷의 종류가 3이고 개수가 a, b, c일 때 > (a+b+c) + (ab+bc+ca) + (abc)가지 경우
n차식 계수들의 합 = (x+a)(x+b)(x+c) = x3 + (a+b+c)x2 + (ab+bc+ca)x + (abc)
x=1 대입, x3은 포함되지 않으므로 -1

function solution(clothes) {
    // 의상의 종류(key) : 의상의 이름(value)
    // 각 종류별로 모으기
    const cate = {};
    // clothes 배열을 돌면서 같은 종류끼리 키:값으로 분류
    clothes.forEach((ele)=>{
        const category = ele[1]
        if(cate[category]){
            cate[category].push(ele[0])
        } else {
	        // 배열형식으로 넣지 않으면 그냥 문자열로 들어감!!
            cate[category] = [ele[0]]
        }
    })
    let mix = 1;
    // n차식 계수들의 합
    // (1+a)(1+b)(1+c) - 1
    for (let key in cate) {
      const total = cate[key]
      mix *= 1+total.length;
    }
    return mix-1;
}

다른 사람의 풀이

function solution(clothes) {
    return Object.values(clothes.reduce((obj, t)=> {
        obj[t[1]] = obj[t[1]] ? obj[t[1]] + 1 : 1;
        return obj;
    } , {})).reduce((a,b)=> a*(b+1), 1)-1;    
}

풀이식은 같은데 구현을 다르게 한 경우.
필요한건 value의 세부 값이 아니라 length값이기 때문에 굳이 의상의 이름 값을 넣을 필요가 없었음.

profile
꾸준히 나아가는 개발자입니다.

0개의 댓글