• TOC {:toc}

이 글은 프로그래머스의 42578번 문제를 JavaScript로 풀이한 것을 모아놓은 글입니다.

일종의 연습 기록이며 제가 정답을 받은 코드와 참고할만한 다른 코드를 같이 기록합니다. 필요한 경우 코드에 대한 해설을 기록합니다만 코드는 통과했어도 해설은 틀릴 수 있기 때문에 가볍게 참고해주시길 부탁드립니다. 피드백은 편하신 방법으로 자유롭게 주시면 감사하겠습니다.

2023.11.15

테스트 통과 시간 메모리
테스트 1 통과 0.22ms 33.4MB
테스트 2 통과 0.18ms 33.6MB
테스트 3 통과 0.32ms 33.6MB
테스트 4 통과 0.22ms 33.5MB
테스트 5 통과 0.29ms 33.5MB
테스트 6 통과 0.21ms 33.5MB
테스트 7 통과 0.31ms 33.5MB
테스트 8 통과 0.20ms 33.5MB
테스트 9 통과 0.09ms 33.4MB
테스트 10 통과 0.09ms 33.5MB
테스트 11 통과 0.12ms 33.5MB
테스트 12 통과 0.21ms 33.5MB
테스트 13 통과 0.20ms 33.5MB
테스트 14 통과 0.14ms 33.4MB
테스트 15 통과 0.08ms 33.5MB
테스트 16 통과 0.08ms 33.6MB
테스트 17 통과 0.24ms 33.4MB
테스트 18 통과 0.26ms 33.6MB
테스트 19 통과 0.27ms 33.5MB
테스트 20 통과 0.17ms 33.4MB
테스트 21 통과 0.09ms 33.5MB
테스트 22 통과 0.11ms 33.4MB
테스트 23 통과 0.26ms 33.5MB
테스트 24 통과 0.29ms 33.4MB
테스트 25 통과 0.28ms 33.5MB
테스트 26 통과 0.35ms 33.4MB
테스트 27 통과 0.14ms 33.6MB
테스트 28 통과 0.32ms 33.5MB
단계 시작 시각 끝난 시각 걸린 시간
풀이 생각 23:28:09 23:28:37
코딩 23:28:41 23:34:46
function solution(clothes) {
    const wear = {};
    clothes.forEach(([_, category]) => {
        wear[category] = (wear[category] || 0) + 1;
    });

    return Object.values(wear).reduce((acc, curr) => acc * (curr + 1), 1) - 1;
}

아이디어 & 풀이

코니가 입을 수 있는 총 의상 조합의 수는 각 종류별 의상의 개수를 곱한 것과 같다.

  • 이 때 해당 의상을 입지 않는 것도 하나의 경우로 들어가야 하므로 각 개수에 1을 더한 값을 곱해야 하고
  • 모두 벗은 것은 의상의 경우로 치지 않으므로 최종 개수에서 1을 빼야 한다.

의상의 종류를 key, 해당 의상의 개수를 value로 하는 객체를 구성한 뒤 해당 객체의 값들에 1을 더한 값들을 모두 곱해서 1을 뺀 값을 반환하면 된다.

  • wear라는 빈 객체를 생성한 뒤, clothes를 순회하면서 의상의 종류를 key로 값을 가져와 해당 값에 1을 더한 값으로 바꾼다.
  • 해당 의상 종류에 처음 접근하는 경우 undefined가 반환되므로 값을 가져올 때 undefined에 대한 처리를 해준다.
  • Objectvalues 메소드를 이용해 wear 객체의 값만 가져온 뒤 이를 reduce로 각 값에 1을 더해 곱한다.