import java.util.Iterator;
import java.util.HashMap;
import java.util.Map;
class Solution {
public int solution(String[][] clothes) {
int answer = 1;
Map<String, Integer> closet = new HashMap<>();
// 각 옷이 몇개씩 있는지 저장
for(String[] s : clothes){
closet.put(s[1], closet.getOrDefault(s[1], 0)+1);
}
Iterator<Integer> it = closet.values().iterator();
while(it.hasNext())
// 각 옷 종류별 경우의 수를 저장, +1은 아예 안입는 경우
answer *= it.next().intValue() + 1;
return answer - 1; // 모든 종류의 옷을 입지 않은 경우를 제외
}
}
put을 통해서 closet에 아직 s[1]이라는 key가 있는 경우에는 value를 가져오고, 없는 경우에는 0으로 만든다. 즉, closet 안에 headgear가 없다면 1(0+1)을 저장시켜주고, headgear가 있다면 기존의 headgear의 value 값에 +1한 값을 closet에 저장시켜 주게 된다.
이렇게 closet을 카운트 해준 뒤, Iterator를 생성하여 각 옷 종류별로 경우의 수를 저장하게 된다.
iterator 옷의 개수를 가져와서 + 1을 더한 후 answer에 곱해주게 되는데, +1을 더해주는 경우는 모든 옷 종류에 대해서 안 입는 경우가 있기 때문에 경우를 하나 더 추가해주는 것이다. 이렇게 모든 종류별로 경우를 세서 answer에 저장한다.
마지막 return을 해줄 때, answer을 그대로 return하는 것이 아닌 -1 한 값을 return하게 되는데, 문제에서 아무것도 입지 않는 것은 허용되지 않는다고 전제조건이 있기 때문에 모든 옷의 종류를 입지 않은 경우 1가지를 뺀 후 return해주게 된다.