프로그래머스 : 위장
문제 분석
- 상의, 하의, 겉옷 등의 큰 분류 안에 여러 의상이 존재할 때, 입을 수 있는 조합의 수를 계산한다.
- Map을 생성하고, Key는 의상 분류, Value는 분류에 해당하는 의상의 수를 넣는다.
- 경우의 수는 각 Key의 Value들의 곱이다.
- 이때 겉옷은 입지 않고 상의와 하의만 입는 경우의 수도 있다. 각 옷의 개수에 + 1(안 입는 경우)
- 아무것도 입지 않는 경우는 없다. 전체에서 - 1
- (상의의 수 + 1) x (하의의 수 + 1) x (겉옷의 수 + 1) - 1
문제 풀이
import java.util.*;
class Solution {
public int solution(String[][] clothes) {
//옷의 종류를 Key로 하고, 해당하는 옷의 개수를 Value로 하는 Map을 생성한다
Map<String, Integer> map = new HashMap<>();
for (int i = 0; i < clothes.length; i++) {
if (!map.containsKey(clothes[i][1]))
map.put(clothes[i][1], 1);
else
map.put(clothes[i][1], map.get(clothes[i][1]) + 1);
}
// Map의 Value에 접근하여 모든 개수를 곱한다
// 한 종류의 옷을 입는 경우의 수는 (옷의 개수 + 하나도 안 입는 경우)이다
int multiplication = 1;
Iterator<String> iterator = map.keySet().iterator();
while (iterator.hasNext()) {
String key = iterator.next();
multiplication *= map.get(key) + 1;
}
// 아무것도 입지 않는 경우는 없으므로 결과에서 1을 뺀다
return multiplication - 1;
}
}
'Etc > Algorithm' 카테고리의 다른 글
[Algorithm] 정렬 - Comparable과 Comparator (0) | 2022.10.18 |
---|---|
[Java] 프로그래머스 : K번째수 (0) | 2022.10.11 |
[Java] 프로그래머스 : 전화번호 목록 (0) | 2022.10.09 |
[Java] 백준 9935번: 문자열 폭발 (1) | 2022.10.08 |
[Java] 백준 1966번: 프린터 큐 (0) | 2022.10.07 |
댓글