# [해시][Lv2] 위장 - 자바스크립트
# 프로그래머스 문제
https://programmers.co.kr/learn/courses/30/lessons/42578 (opens new window)
# 시도 1.
이전 문제에서 해시의 개념을 알았으니 술술 풀릴거라생각했으나...
일단 clothes
배열을 {key,value} ⇒ {의상 종류 명, 의상의 개수}의 map형식으로 바꿨다.
다만.. 뭔가 노가다로 구하는 게 아니라 조합공식을 써야 할 것 같았는데 수학을 놓은지 오래 되어서 계속 헤맸다. 의상 개수를 모두 곱해도 안나오고.. 뭔가 놓치고 있는 것 같았음..
결국 질문하기 게시판을 보니, 의상개수+1
을 해서 곱하라는 말이 있었다.
그 이유는 ✨해당 의상을 선택하지 않는 경우✨를 고려하기 위함이었다.ㅠㅠ
저 포인트만 빨리 찾았어도 풀렸을텐데 사실 이문제는 프로그래밍적 난이도보단 수학문제 푸는 느낌이었다...
테스트케이스1의 경우 무조건 조합공식을 써야 통과한다고 함.. 링크 (opens new window)
결론 : 모든 의상을 (개수 +1) 해서 곱한 후, -1(아무것도 안입는 경우를 제외)
function solution(clothes) {
var answer = 0;
const hashMap = new Map();
// 의상 종류를 키로 가지고 해당 종류 의상 개수를 value로
clothes.forEach( c => {
let clothesCnt = hashMap.get(c[1]);
if ( clothesCnt ) hashMap.set(c[1], clothesCnt+1);
else hashMap.set(c[1], 1);
})
answer = [ ...hashMap.values() ].reduce((acc, cur) => {
return acc * (cur+1) // 이 부분을 계속 acc*cur로 두고 고민했었다..ㅠㅠ...
}, 1);
return --answer;
}
정확성 테스트
테스트 1 〉 통과 (0.09ms, 30MB)
테스트 2 〉 통과 (0.11ms, 30.1MB)
테스트 3 〉 통과 (0.12ms, 29.9MB)
테스트 4 〉 통과 (0.09ms, 30.1MB)
테스트 5 〉 통과 (0.11ms, 30MB)
테스트 6 〉 통과 (0.11ms, 29.9MB)
테스트 7 〉 통과 (0.13ms, 30.2MB)
테스트 8 〉 통과 (0.12ms, 30MB)
테스트 9 〉 통과 (0.10ms, 30.3MB)
테스트 10 〉 통과 (0.11ms, 30MB)
테스트 11 〉 통과 (0.13ms, 30.2MB)
테스트 12 〉 통과 (0.08ms, 30.1MB)
테스트 13 〉 통과 (0.13ms, 30.1MB)
테스트 14 〉 통과 (0.10ms, 30.2MB)
테스트 15 〉 통과 (0.10ms, 30.1MB)
테스트 16 〉 통과 (0.07ms, 30MB)
테스트 17 〉 통과 (0.08ms, 29.8MB)
테스트 18 〉 통과 (0.08ms, 30MB)
테스트 19 〉 통과 (0.11ms, 30.4MB)
테스트 20 〉 통과 (0.10ms, 30.1MB)
테스트 21 〉 통과 (0.10ms, 29.7MB)
테스트 22 〉 통과 (0.10ms, 30.1MB)
테스트 23 〉 통과 (0.12ms, 30.2MB)
테스트 24 〉 통과 (0.12ms, 30MB)
테스트 25 〉 통과 (0.11ms, 30.1MB)
테스트 26 〉 통과 (0.13ms, 30.1MB)
테스트 27 〉 통과 (0.11ms, 30.1MB)
테스트 28 〉 통과 (0.15ms, 30.1MB)