https://school.programmers.co.kr/learn/courses/30/lessons/42578
import java.util.*;
class Solution {
public int solution(String[][] clothes) {
int answer = 0;
HashMap<String, Integer> map = new HashMap<>();
// key 값이 있으면 value 반환, 없으면 0 반환 후 +1
for (int i=0; i<clothes.length; i++) {
map.put(clothes[i][1], map.getOrDefault(clothes[i][1], 0)+1);
}
int sumValue = 1;
// value만 뽑아서 +1을 한 후 곱해준다
for (Integer value : map.values()) {
sumValue *= (value + 1);
}
// 아무것도 고르지 않은 경우의 수 1을 빼준다
answer = sumValue - 1;
return answer;
}
}
처음에는 중복이 불가능한 key값에 옷 이름을 넣고 value에 옷 종류를 넣어야하나? 했는데 key에 옷 종류, value에 옷 개수를 카운트해서 옷 종류별로 옷이 몇 개 있는지 구하려고 했다. 경우의 수를 구할 때 옷 종류별 옷의 개수에 +1 을 더한 후 곱해주고 꼭 한 벌 이상은 입어야한다고 했으니까 마지막에 아무 것도 고르지 않는 경우인 -1을 해주면 되기 때문이다.
예를 들어 예제 1의 경우
headgear 2
eyewear 1 이니까
(2+1) * (1+1) -1 을 해주면 된다. 그래서 총 5가지의 경우.
전에 정리해놓은 HashMap에 대한 포스팅을 조금 참고하여 풀었다.
(HashMap 정리)
(.getOrDefault 정리)