import java.util.*;
class Solution {
public int solution(String[][] clothes) {
int answer = 1;
HashMap<String, List<String>> clothMap = new HashMap<>();
for (int i=0; i<clothes.length; i++) {
List<String> clothNames = new ArrayList<>();
clothMap.put(clothes[i][1], clothNames);
}
for (int i=0; i<clothes.length; i++) {
clothMap.get(clothes[i][1]).add(clothes[i][0]);
}
for (String key : clothMap.keySet()) {
List<String> clothNames = clothMap.get(key);
answer *= clothNames.size() + 1; // 안고르는 경우가 있기 때문에 +1해서 서로 곱한다.
}
return answer-1; // 아무옷도 안입는 경우는 제외한다.
}
}
여러 옷의 종류가 있고 여러 옷들이 하나의 종류에 속한다.
해당 상황에서 스파이가 입을 수 있는 옷의 경우의 수를 구하는 문제이다.
먼저 HashMap을 만들어서 다음과 같은 형태로 데이터들을 재구성했다.
Key : 옷의 종류, Value : 옷 이름 리스트
그런 다음 모든 경우의 수를 구하기 위해
각 옷의 종류에 속하는 옷 갯수들을 전부 곱해야 하는데
옷을 안고르는 경우도 고려해야 되기 때문에 +1 해서 곱해주었다.
또한 스파이가 최소한 1개의 옷은 입는다는 조건이 있기 때문에
마지막에 1를 빼줘야한다.