
문제 풀이 : 의상의 이름은 중요하지 않고, 의상의 종류별로 몇 가지의 의상이 있는지 확인한 후 조합하는 경우의 수를 구해야 함
각 옷마다 의상의 수+1이 종류 별 경우의 수인데, 예를 들어 위 표에서 얼굴은 안경을 쓰는 경우, 선글라스를 쓰는 경우, 아무것도 쓰지 않는 경우 이렇게 2+1개의 종류이므로 총 경우의 수는 3x2x2x2임
이때! 모든 하나도 안 입는 경우가 발생하므로 1을 빼주어 3x2x2x2-1이 됨
import java.util.HashMap;
class Solution {
public int solution(String[][] clothes) {
int answer = 1;
HashMap<String, Integer> map = new HashMap<>();
for(String[] c: clothes) {
String category = c[1];
map.put(category, map.getOrDefault(category, 0)+1);
}
for(int i: map.values()) {
answer *= (i+1);
}
return answer-1;
}
}
<몰랐던 부분>
map.put(category, map.getOrDefault(category, 0)+1);에서 getOrDefault는 키가 카테고리인 것의 값이 없으면 기본 값을 0으로 갖고 1을 더한다는 뜻임
즉 처음에는 처음 저장되는 값이므로 기본값 0에 +1을 하여 해당 카테고리의 값이 1로 저장되고, 그 다음엔 1+1인 2로 저장됨
이런 방식으로 해당 카테고리의 의상이 몇 개인지 알 수 있게 됨
'알고리즘 오답노트 > JAVA' 카테고리의 다른 글
| [programmers] 같은 숫자는 싫어 (0) | 2024.09.20 |
|---|---|
| [programmers] 전화번호 목록 (4) | 2024.09.13 |
| [programmers] 완주하지 못한 선수 (0) | 2024.09.11 |
| [programmers] 폰켓몬 (0) | 2024.09.11 |