이롭게 현명하게
[programmers - 42578] Lv2 의상/ Javascript 본문
문제
풀이
코드 설명
코드
[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"]
]
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;
}
[후기]
처음에 문제를 풀 때 문제 내용을 이해하지 못해서 어떻게 접근해야 할지 몰라 어려웠다.
여러 블로그의 내용과 풀이를 보면서 문제를 이해하고 경우의 수 공식을 적용하는 방법으로 접근하였다.
구현하면서 '아무것도 입지 않은 경우'를 빼는 부분을 놓쳐 결과가 달라지는 문제를 겪었다.
이번 문제를 통해 조합과 경우의 수 문제에서 '포함하지 않는 경우의 수'도 고려할 줄 알게 되었다.
잘못된 정보는 댓글에 남겨주시면 감사하겠습니다!😊
댓글과 좋아요는 큰 힘이 됩니다!

'알고리즘 > programmers' 카테고리의 다른 글
[programmers - 120956] Lv0 옹알이 (1) / Python (0) | 2023.08.28 |
---|---|
[programmers - 120875] Lv0 평행 / Python (0) | 2023.08.25 |
[programmers - 120876] Lv0 겹치는 선분의 길이/ Python (0) | 2023.08.24 |
[programmers - 120866] Lv0 안전지대 / Python (0) | 2023.08.19 |