# [해시][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)
Last Updated: 8/11/2022, 5:17:02 AM