Programming/프로그래머스

[프로그래머스 / 해시] 위장 (java)

쬬앤 2020. 3. 27. 14:48

초기값 answer을 1로 해주어야 한다는 것을 주의하자.

 

[문제접근]

옷 개수에 따라 경우의 수를 구해야 한다. -> 옷 종류에 따른 개수에 따라 hash map을 구성한다. 

경우의 수를 구하는 공식을 구한다. 

- 각 종류의 옷에 안입는 선택지를 하나 추가 (옷 개수 + 1)

- 하나도 안입는 선택지는 없으므로 전체에서 -1

따라서 공식은 (n+1) * (m+1) *... -1

 

[코드]

import java.util.*;
class Solution {
    public int solution(String[][] clothes) {
        int answer = 1;
        Map<String, Integer> closet = new HashMap<>();
        int val = 0;
        
        for(String[] clo : clothes){
            if(closet.get(clo[1]) == null)
                closet.put(clo[1], 1);
            else{
                val = closet.get(clo[1]) + 1;
                closet.put(clo[1], val);
            }
        }
        // 각 종류의 옷에 안입는 선택지를 하나 추가 (+1)
        // 하나도 안입는 선택지는 없으므로 전체에서 -1
        
        for(String key: closet.keySet()){
            answer *= (closet.get(key) + 1);
        }
        answer -=1;
        return answer;
    }
}