이롭게 현명하게

[programmers - 42578] Lv2 의상/ Javascript 본문

알고리즘/programmers

[programmers - 42578] Lv2 의상/ Javascript

dev_y.h 2025. 10. 2. 18:25
728x90
반응형


문제

풀이

코드 설명

코드


 

[programmers - 42578] Lv2 의상 / JavaScript


[🔗문제🔗]

https://school.programmers.co.kr/learn/courses/30/lessons/42578

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

의상 문제

 

[제한사항]

의상 제한사항

[입출력 예시]

번호 입력 출력
  [ ["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"] ]   5  
  [ ["crow_mask", "face"], ["blue_sunglasses", "face"], ["smoky_makeup", "face"] ] 3

 

 


[풀이]

해시
const clothes = [    
["yellow_hat", "headgear"],     
["blue_sunglasses", "eyewear"],     
["green_turban", "headgear"]
]

3(headgear) x 2(face) = 6

 

headgear에 yellow_hat, green_turban을 입은 경우와 입지 않은 경우(3가지)가 있다.

eyewear 에는 blue_sunglasses와 입지 않은 경우(2가지)가 있다.

3*2 = 6이다.

이때 6이라는 결과는 둘 다 입지 않은 경우도 포함이 된다.

문제에서 최대 1가지 이상의 옷은입고 잇다고 했으므로

코디는 종류별로 최대 1가지 의상만 착용할 수 있고, 하루에 최소한 한 개의 의상은 입는다.

그렇기 때문에 둘 다 입지 않은 경우를 빼주어야 한다.

그래서 ( 3 * 2 ) - 1 = 5의 결과가 나온다.



[코드 설명]

의상 정보를 구조화하기 위해 딕셔너리로 접근하였다.

옷의 종류를 key, 옷의 개수를 value.

그래서 옷 정보를 하나씩 확인하면서 딕셔너리에 해당 키가 없으면 추가하고, 있다면 값을 1 증가시키는 방식으로 구현하였다.

    var dic={}
    for(let i = 0;i<clothes.length;i++){
        let type = clothes[i][1];
        if(dic[type]){
            dic[type]+=1
        }else{
            dic[type]=1
        }
   
    }

 

옷 종류별로 곱해준다.

이때 +1은 입지 않은 경우이다.

return answer -1은 모든 조합에서 아무것도 입지 않은 경우를 빼주어야 한다.

var answer = 1;
    for(let key in dic){
        answer *= (dic[key]+1)
    }
    
    return answer-1;

 

<코드>

function solution(clothes) {
    var dic={}
    for(let i = 0;i<clothes.length;i++){
        let type = clothes[i][1];
        if(dic[type]){
            dic[type]+=1
        }else{
            dic[type]=1
        }
   
    }
    var answer = 1;
    for(let key in dic){
        answer *= (dic[key]+1)
    }
    
    return answer-1;
}

 


[후기]

처음에 문제를 풀 때 문제 내용을 이해하지 못해서 어떻게 접근해야 할지 몰라 어려웠다.

여러 블로그의 내용과 풀이를 보면서 문제를 이해하고 경우의 수 공식을 적용하는 방법으로 접근하였다.

구현하면서 '아무것도 입지 않은 경우'를 빼는 부분을 놓쳐 결과가 달라지는 문제를 겪었다.

이번 문제를 통해 조합과 경우의 수 문제에서 '포함하지 않는 경우의 수'도 고려할 줄 알게 되었다.

 


잘못된 정보는 댓글에 남겨주시면 감사하겠습니다!😊

댓글과 좋아요는 큰 힘이 됩니다!

728x90
반응형
Comments