규칙은 금방 찾았는데 코드로 짜면서 헛발질을 좀 했다 ..
public static int solution(String[][] clothes) {
int answer = 1;
HashMap<String, Integer> hm = new HashMap<>();
for(int i=0; i< clothes.length; i++) {
String key = clothes[i][1];
if(hm.containsValue(key)) {
hm.put(key, hm.get(key) + 1);
} else {
hm.put(key, hm.getOrDefault(key, 0) + 1);
}
}
for (String k : hm.keySet()) {
answer *= hm.get(k)+1;
}
System.out.println(answer+" ");
return answer-1;
}
사용된 함수는 기존 해쉬문제 풀면서 썼던 함수들이라 따로 언급은 하지 않겠다.
규칙을 구하기 위해 설정해 놓은 케이스들
F 얼굴, T 상의, P 하의
1) F(2) + T(1) = 5
2) F(3) = 3
3) F(2) + T(2) + P(2) = 26
내가 찾은 규칙을 코딩으로 짜려니 어려워서 다른 사람 풀이에서 도움을 좀 받았다 ..
나는 일단 한벌씩 입은 경우의 수를 초기값으로 설정하고 각각 카테고리마다 조합해 입은 수를 더해가는 방향으로 규칙을 찾았다
2+2+2+(2*2)+(2*2)+(2*2)+(2*2*2)
이게 경우의 수 공식에 연결해내는데까지 좀 걸렸긴 했지만
아무튼 가짓수+1 값들을 곱해주고 최종 값에서 -1 을 해주면 정답이 나왔다. 가짓수에 1을 더해주는 이유는 조합없이 단벌만 입었을 경우를 더해주는 것이고 마지막에 1을 빼주는 이유는 모두 안입었을 경우는 없기 때문에 그 값만 빼준 것이다.