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 |
'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 탑 (스택/큐) (0) | 2019.12.03 |
---|---|
프로그래머스 - 베스트앨범 (해시) (0) | 2019.12.03 |
프로그래머스 - 전화번호 목록 (해시) (0) | 2019.11.30 |
프로그래머스 - 완주하지 못한 선수 (해시) (0) | 2019.11.30 |
프로그래머스 - 징검다리 (이분탐색) (0) | 2019.11.29 |