CS/코딩 테스트
의상
valleycho-tech
2025. 3. 9. 20:01
문제
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 접근)
최소 한가지 이상의 의상을 입고, 서로 다른 옷의 조합의 수를 return 하도록 되어있습니다.
이 문구에서 의상이 무엇인지 보다는 의상의 타입의 갯수가 중요하다는 것을 알 수 있습니다. 그래서 해시맵을 이용하여, 의상 종류의 갯수가 몇개 인지 파악하는 방식으로 접근하면 됩니다.
정답 및 풀이
정답
function solution(clothes) {
let answer = 1;
const map = new Map();
for (let i = 0; i < clothes.length ;i++) {
let [cloth, clothType] = clothes[i];
if (map.has(clothType)) {
map.set(clothType, map.get(clothType) + 1);
} else {
map.set(clothType, 1);
}
}
for (const [key, value] of map) {
answer *= (value + 1)
}
return answer - 1;
}
풀이
문제 접근법에서 의상이 무엇인지 보다 의상의 타입의 갯수를 파악하는게 중요하므로 clothes를 해시맵의 담아둡니다.
그리고 반복문을 돌아 해당 의상 타입의 종류가 해시맵에 있으면 그 갯수를 가져와 + 1을 더해주고 없으면, 1의 데이터를 넣어주도록 하였습니다.
입출력의 예
1번 입출력 예)
clothes: [["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]
return : 5
설명: headgear 2종류, eyewear 1종류가 있고, 최소 1종류 이상 입을 수 있다고 했으므로 eyewear 1종류를 선택하고 의상을 입지 않는이라는 아무것도 안입는 선택지도 한가지 더 있습니다. 그러므로 (2+1) * (1+1) = 6이라는 결과 값이 나오고, 최소 한가지 의상은 입는다고 했으므로 -1을 해주어 6-1 = 5라는 결과 값이 출력됩니다.
2번 입출력 예)
clothes: [["crow_mask", "face"], ["blue_sunglasses", "face"], ["smoky_makeup", "face"]]
return : 3
설명: face의 3종류가 있으므로, 1번 입출력 예에서 설명한 방식대로 (3+1) - 1 = 3이라는 결과 값이 출력됩니다.