[프로그래머스] 위장

박재윤·2020년 12월 23일
0

코테준비

목록 보기
7/25

문제 설명

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

스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다.

예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다.

종류이름
얼굴동그란 안경, 검정 선글라스
상의파란색 티셔츠
하의청바지
겉옷긴 코트

스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요.

나의 풀이

function solution(clothes) {

    const groupedClothes = clothes.reduce((acc, curr) => {
        if (!acc[curr[1]]) {
            acc[curr[1]] = [];
        }
        acc[curr[1]].push(curr[0]);
        return acc;
    }, {});

    const answer = Object.values(groupedClothes).reduce((acc, curr) => {
        return acc * (curr.length+1);
    }, 1) - 1;

    return answer;
}

풀이 회고

공식은 각 종류를 하나를 더한 다음에 전부 곱하고 하나를 빼주는 것이었다. 생각을 하는데 그렇게 오래 걸리지는 않은 것 같다. 이제 배열을 옷 종류별로 나뉘서 넣는 것이 관건이었는데

const groupedClothes = clothes.reduce((acc, curr) => {
        if (!acc[curr[1]]) {
            acc[curr[1]] = [];
        }
        acc[curr[1]].push(curr[0]);
        return acc;
    }, {});

뭔가 마음에 들지는 않는 것 같다. reduce를 사용할 때 acc를 변형시키는 것은 각 iteration이 순수하지 못하게 하기 때문에 안 좋다고 했던 것 같아서 아쉬움이 남는다. 그리고 다시 생각을 해보니 그냥 갯수만 넣었어도 됐을 것 같다.

0개의 댓글

관련 채용 정보