💡 유형 : 해시
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42578
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
구현
하루에 최소 한 개의 의상을 입을 때, 서로 다른 옷의 조합 수
clothes: [의상의 이름, 의상의 종류] 2차원 배열
각 종류 당 하나의 옷 고를 수 있음
1. 1개의 의상을 입는 경우: 행의 개수(clothes.length)
2. 2개 이상의 의상을 입는 경우: 의상의 종류를 보고 고름 => 같은 종류끼리 모아야한다. 따라서 객체를 만들어 종류를 키로 사용. 이때 개수만 사용하면 된다.
풀이
function solution(clothes) {
//옷 종류별로 옷을 그룹화
const clothesObj = clothes.reduce((acc,[name, type])=>{
acc[type] = (acc[type] || 0) + 1; //각 종류의 옷 개수를 카운트
return acc;
},{});
//각 종류 별 옷 개수 + 1(입는 경우 + 안 입는 경우)을 곱한 뒤, 아무것도 입지 않는 경우 제외
return Object.values(clothesObj).reduce((acc, count)=> acc * (count + 1),1) -1 ;
2차원 배열을 객체로 변환하는 방법은 아래의 블로그를 참고했다.
2차원 배열 데이터 key-value 객체로 만들기
programmers의 위장 문제를 풀면서 2차원 배열 데이터를 key-value 쌍을 갖는 객체로 만들고 싶었다. 추후에도 이런 풀이를 사용할 일이 있을거라 생각하여 블로그에 남겨 놓기로 했다.아래의 test case
velog.io
reduce를 처음으로 제대로 사용해보았다. 초깃값을 설정해서 계산해야할 때 유용한 것 같다. reduce를 사용해서 코드를 작성하는 연습을 많이 해봐야겠다.
'알고리즘 > 해시' 카테고리의 다른 글
[프로그래머스] Lv 2. 전화번호 목록 - Javascript 풀이 (1) | 2025.01.26 |
---|---|
[프로그래머스] Lv 1. 폰켓몬 - Javascript 풀이 (0) | 2025.01.25 |