# [해시][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