[프로그래머스 코딩테스트 고득점 Kit] 위장

doongdoong·2020년 10월 3일
0

문제

https://programmers.co.kr/learn/courses/30/lessons/42578?language=javascript

풀이

  1. 계산하기 쉽게 key-value 형태로 만든다.
{ 
  headgear: 1,
  eyewear: 2,
  ...
}
  1. 경우의 수를 구하되 해당 의상의 종류를 더해서 구한다. calcCombination ex) 얼굴1, 얼굴2, 얼굴없는 / 안경1, 안경2, 안경없는 => 3 * 3
  2. 최소 한가지 옷을 입어야 하므로, 아무것도 안입은 상태를 빼준다. return result - 1; // 3 * 3 - 1
function mapper(clothes) {
    const map = {};
    clothes.forEach(([_, kind]) => {
        if( !map[kind] ) {
            map[kind] = 1;
        } else {
            map[kind]++;
        }
    });
    
    return map;
}

function calcCombination(map) {
    const categoryCounts = Object.values(map);
    const result = categoryCounts.reduce((acc, cur) => {
        acc = acc * (cur + 1);
        
        return acc;
    }, 1);
    
    return result;
}

function solution(clothes) {
    const map = mapper(clothes);
    const result = calcCombination(map);
    
    return result - 1;
}
profile
PS 연습장

0개의 댓글