민트초코수장 2020. 12. 23. 21:55

1. 문제

 

예제


2. 문제 해석

스파이가 가진 의상들이 2차원 배열로 주어지고 그 배열에는 [ 의상이름, 의상종류 ] 로 되어있습니다.

해당하는 의상을 종류로 나누어 여러가지의 조합을 만들어 몇 개의 조합이 나오는지 반환하면 됩니다.

주의할 점은 1개의 의상만 사용하는 것도 포함이며 최소 한 개의 의상을 입는다는 것입니다.


 

3. 코드 해석

const div = {};
const midArr = [];
let divNum;
function solution(clothes) {
    for (let clo of clothes) {
        if (div[clo[1]] === undefined) {
            div[clo[1]] = clo[0];
        }else {
            div[clo[1]] += `,${clo[0]}`;
        }
    }
    
    for(let index in div) {
        midArr.push(div[index].split(',').length);
    }
    return parseInt(calcurator(midArr));
}

function calcurator(midArr) {
    if (midArr.length === 1) {
        return midArr.join();
    }
    while(midArr.length > 1) {
        divNum = midArr.splice(0,2);
        midArr.push((divNum[0] + 1) * (divNum[1] + 1) - 1);
    }
    return midArr.join();
}

배열 -> object

 

1. div라는 빈 오브젝트를 만듭니다.

2. clothes라는 2차원 배열을 for문을 이용해 하나씩 꺼냅니다.

3. div 오브젝트에 의상종류가 없다면 undefined가 결과값으로 나오기 때문에 undefined가 나오면 key와 value로 대입

4. 의상종류가 있다면 value에 의상이름 추가 `,${clo[0]}`를 넣어 ex) yellow_hat, green_turban 처럼 대입됩니다.

5. 다 대입이 되었다면 계산처리를 할 함수 calcurator를 생성합니다.

 

object -> 배열

 

1. for in 문을 이용해 object에서 key에 있는 value들을 꺼냅니다.

2. , 를 기준으로 하나의 키값에 들어있는 value를 나눠 그 길이를 midArr에 넣어줍니다.

 

계산

 

1. 종류마다 몇 개의 의상이 있는지 넣어둔 midArr의 길이가 1인 경우 join 메서드를 이용해 midArr를 다시 string으로 만들어 반환

2. 경우의 수를 계산한 값이 midArr에 들어갈 수 있도록 splice를 이용해 index 0부터 2까지 지워줍니다.

3. 한 옷의 종류수와 입지 않았을 경우(1)을 더하고 다른 옷의 종류수와 입지 않았을 경우(1)를 곱합니다.

4. 그리고 아무것도 입지 않았을 경우(1)을 빼줍니다.

5. 마지막으로 배열로 이루어져있는 midArr을 join으로 string으로 바꿔줍니다.

6. string을 parseInt로 정수로 바꿔준 후 반환합니다.

 

 

programmers.co.kr/learn/courses/30/lessons/42578

 

코딩테스트 연습 - 위장

 

programmers.co.kr

 

반응형