문제
이 문제는 의상의 이름과는 상관없이 종류만을 가지고 조합을 완성하여 문제를 해결할 수 있습니다.
먼저 주어진 의상 종류의 개수만을 고려하는 것이 아닌 의상 종류도 없는 경우도 고려하여 조합을 완성해야 합니다.
예를 들어 [["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]] 라면 headgear는 2가지고 eyewear는 1가지입니다. 하지만 의상 종류가 없는 경우도 고려해야 되기 때문에 headgear 3가지, eyewear 2가지로 조합을 만듭니다. 하지만 의상은 무조건 착용해야되므로 모두 착용되지 않은 한 경우를 빼서 문제를 해결합니다. (3 * 2 - 1)
import java.util.*;
class Solution {
public int solution(String[][] clothes) {
int answer = 1;
Map<String, Integer> map = new HashMap<String, Integer>();
// HashMap 완성
for (String[] cloth : clothes) {
if (!map.containsKey(cloth[1])){
map.put(cloth[1], 1);
} else {
map.put(cloth[1], map.get(cloth[1])+1);
}
}
for (Integer value : map.values()){
answer *= value + 1;
}
return answer - 1;
}
}
if (!map.containsKey(cloth[1])){
map.put(cloth[1], 1);
} else {
map.put(cloth[1], map.get(cloth[1])+1);
}
// 보완 코드
map.put(cloth[1], map.getOrDefault(cloth[1], 1) + 1);
✏️ 기존에는 조건문을 사용해서 문제를 해결했지만 getOrDefault를 활용해서 해당 key가 없다면 Default value로 1을 설정하고, 그게 아니라면 기존 값에서 1을 더하도록 했습니다.
피드백 및 개선점은 댓글을 통해 알려주세요😊
map.getOrDefault(clothes[i][1], 0) + 1) 여기 디폴트값을 0으로 주는게 맞는것 같습니다