728x90
문제 출처 : 프로그래머스 코딩테스트 연습 고득점 kit 해시 3번
( https://programmers.co.kr/learn/courses/30/parts/12077 )
문제 설명
스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장한다.
스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를
return 하도록 solution 함수를 작성하시오.
제한 사항
- clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다.
- 스파이가 가진 의상의 수는 1개 이상 30개 이하입니다.
- 같은 이름을 가진 의상은 존재하지 않습니다.
- clothes의 모든 원소는 문자열로 이루어져 있습니다.
- 모든 문자열의 길이는 1 이상 20 이하인 자연수이고 알파벳 소문자 또는 '_' 로만 이루어져 있습니다.
- 스파이는 하루에 최소 한 개의 의상은 입습니다.
문제 풀이 방법
- obj라는 객체로 각 항목을 구분한다.
- 각 객체의 1번 인덱스에 있는 의상 타입으로 같은 타입을 갖는 의상의 갯수를 파악
- 여기서 의상 타입이 없었다면 1을 지정해주고 있었다면 1을 더해준다.
(객체의 key에 연산해주면 valuer값에 더해진다.) - 마지막 reduce 함수를 이용해 경우의 수를 구해준다.
Object.values()를 통해 반환된 값 배열들을 reduce함수를 이용하여 +1(안입은 경우)에
-1(전부 안입었을 경우)을 생각하고 코드 작성.
코드
function solution(clothes) {
return Object.values(
clothes
.reduce((obj, type) => {
obj[type[1]] = obj[type[1]] ? obj[type[1]] + 1 : 1;
return obj
}, {})
).reduce((a, b) => a * (b + 1), 1) - 1;
}
728x90
'코딩 테스트 > 프로그래머스 코딩 테스트 연습' 카테고리의 다른 글
정렬 / 2 / 가장 큰 수 (JS) (0) | 2022.06.08 |
---|---|
정렬 / 1 / K번째 수 (JS) (0) | 2022.06.08 |
해시 / 3 / 베스트앨범 (JS) (0) | 2022.06.07 |
해시 / 2 / 전화번호 목록 (Java) (0) | 2022.06.07 |
해시 / 1 / 완주하지 못한 선수 (JS) (0) | 2022.06.07 |