문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
핵심 아이디어
- 의류 데이터 구조화:
- clothes 배열을 순회해 각 의류 아이템의 타입별로 개수를 세는 객체 clothesByType을 생성.
- 타입별 개수 세기:
- 각 아이템에서 타입을 추출해 해당 타입의 개수를 증가시킴.
- 타입이 처음 등장할 경우에는 1로 초기화.
- 조합 수 계산:
- Object.values(clothesByType)를 사용해 타입별 의류의 개수 배열을 생성.
- reduce를 사용해 각 타입의 개수에 1을 더한 후 곱해 전체 조합 수를 계산.
- 초기값을 1로 설정해 곱셈을 진행.
- 아무것도 착용하지 않는 경우 제외:
- 최종 조합 수에서 1을 빼서 아무것도 착용하지 않는 경우를 제외한 결과를 반환.
정답
function solution(clothes) {
let clothesByType = {};
clothes.forEach(item => {
const [, type] = item;
if (!clothesByType[type]) {
clothesByType[type] = 1;
} else {
clothesByType[type]++;
}
});
let answer = Object.values(clothesByType).reduce((acc, typeCount) => acc * (typeCount + 1), 1);
return answer - 1;
}