💡 유형 : 해시

 

문제 링크

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차원 배열을 객체로 변환하는 방법은 아래의 블로그를 참고했다. 

https://velog.io/@rhkrgudwh/2%EC%B0%A8%EC%9B%90-%EB%B0%B0%EC%97%B4-%EB%8D%B0%EC%9D%B4%ED%84%B0-key-value-%EA%B0%9D%EC%B2%B4%EB%A1%9C-%EB%A7%8C%EB%93%A4%EA%B8%B0

 

2차원 배열 데이터 key-value 객체로 만들기

programmers의 위장 문제를 풀면서 2차원 배열 데이터를 key-value 쌍을 갖는 객체로 만들고 싶었다. 추후에도 이런 풀이를 사용할 일이 있을거라 생각하여 블로그에 남겨 놓기로 했다.아래의 test case

velog.io

 

reduce를 처음으로 제대로 사용해보았다. 초깃값을 설정해서 계산해야할 때 유용한 것 같다. reduce를 사용해서 코드를 작성하는 연습을 많이 해봐야겠다.

 

+ Recent posts