/ CODING

<프로그래머스> 해시(Hash) Level 2 위장문제 (1)

프로그래머스 > 해시 > 위장문제

경우의 수를 구하는 문제인데
나는 경우의 수를 구하는게 너무 약해서 도와줘요 구글! 을 했다
옷 경우의 수 구하기..

상의 = 파란티, 빨강티
하의 = 바지, 치마, 레깅스

같은 타입은 겹쳐입지 않으며, 뭐라도 최소 한장 걸치는 것이 목적인 경우들을 구해봤다
파란티 + 바지
                + 치마
                + 레깅스
빨강티 + 바지
                + 치마
                + 레깅스
상의 안입기 + 바지
                + 치마
                + 레깅스

이렇게 총 9개가 나온다.
그럼 (상의 2개 + 안입는 경우) * (하의 3개 + 안입는 경우) …
의 공식을 뽑아낼 수 있다.

그리하여 {/{“옷 “, “옷 타입”}/} 의 형태인 2차 배열에서
각 옷 타입의 수를 구해 경우의 수를 반환하는 식의 코드를 짰다.

import java.util.*;
class Solution {
    public int solution(String[][] clothes) {
        int answer = 1;
        HashMap<String, Integer> map= new HashMap<String, Integer>();
       
       //map에 <"face", 0> 이렇게 중복값 없이 넣어준다. 
        for (int i=0; i< clothes.length; i++) {
            map.put(clothes[i][1], 0 );       
        }
        // 배열과 직접 비교하며 +1로 옷 타입마다 몇개인지 세어 map에 다시 넣어준다. 
         for(String key: map.keySet()) {
            for (int i=0; i<clothes.length; i++) {
                if ( key.equals(clothes[i][1]) ) {
                    int tmp = map.get(key);
                    tmp +=1;
                    map.put(key, tmp);
                }
            
            }
        }
        //경우의 수 구하기 :  (상의 + 안 입는 경우 ) * (하의 + 안 입는 경우 )
        for (int value : map.values()) {
            answer *= value+1;
        
        }
       
        
        return answer-1;
    }
}



커버사진 출처 프로그래머스