알고리즘 풀이/프로그래머스

프로그래머스 - 위장 (해시)

배게 2019. 11. 30. 10:49
728x90

같은 이름을 가진 의상은 없으므로 의상의 개수만 체크해주면 된다


하나의 종류밖에 없을 경우 그대로 value값을 출력해주면 되고


여러 종류가 있을 경우 각 종류당 하나의 의상만을 입을 수 있는 것을 활용하여


집합들을 활용하여 만들 수 있는 경우의 수 공식을 활용해서 품


A , B , C 집합의 최대 경우의 수 (a+1) * (b+1) * (c+1) -1


각 집합마다 가상의 null 의상을 넣어줘서 곱해준다는 식으로 생각하면됨


마지막 1을 빼는 이유는 각각 집합에서 null - null - null 의상의 경우의 수 (의상 무조건 1개 이상 입어야함)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
    public int solution(String[][] clothes) {
        int answer = 1;
 
        HashMap<String, Integer> hm = new HashMap<>();
 
        for (int i = 0; i < clothes.length; i++) {
            String kind = clothes[i][1];
            if (!hm.containsKey(kind))
                hm.put(kind, 1);
            else
                hm.put(kind, hm.get(kind) + 1);
        }
 
        if (hm.size() == 1) {
            for (String key : hm.keySet()) {
                return hm.get(key);
                // System.out.println(key+" "+hm.get(key));
            }
        } else {
            for (String key : hm.keySet()) {
                answer *= (hm.get(key) + 1);
                // System.out.println(key+" "+hm.get(key));
            }
 
        }
        answer--;
 
        return answer;
    }
cs