728x90
코드 힌트
- HashMap 사용: 의류의 종류별 개수를 저장하기 위해 HashMap을 사용합니다.
- 조합 계산: 각 의류 종류별로 (의류 수 + 1)을 곱하여 모든 조합을 계산합니다. 여기서 +1은 해당 종류의 의류를 선택하지 않는 경우를 포함합니다.
- 모든 종류를 선택하지 않는 경우 제외: 모든 조합에서 하나도 선택하지 않는 경우를 제외하기 위해 최종 결과에서 -1을 합니다.
수학적 힌트
이 문제는 조합을 다루는 문제입니다. 각 종류의 의상은 선택하거나 선택하지 않을 수 있습니다. 예를 들어, 두 종류의 의상(모자, 상의)이 있을 때, 각각 두 개의 옵션(착용하지 않음, 착용)이 있습니다. 이는 아래와 같은 조합을 형성합니다:
- 모자를 착용하지 않음, 상의를 착용하지 않음
- 모자를 착용하지 않음, 상의를 착용
- 모자를 착용, 상의를 착용하지 않음
- 모자를 착용, 상의를 착용
하지만 모든 의상을 착용하지 않는 경우는 제외해야 하므로, 최종 결과에서 하나를 빼야 합니다.
예시
다음은 의류 배열 예시입니다:
String[][] clothes = {
{"yellow_hat", "headgear"},
{"blue_sunglasses", "eyewear"},
{"green_turban", "headgear"}
};
위 예시에서 headgear 종류의 의상은 두 개, eyewear 종류의 의상은 한 개 있습니다. 가능한 조합은 다음과 같습니다:
- 아무것도 착용하지 않음(문제 조건에 맞지않음 그렇기에 -1)
- yellow_hat 착용
- green_turban 착용
- blue_sunglasses 착용
- yellow_hat + blue_sunglasses 착용
- green_turban + blue_sunglasses 착용
모든 조합의 수는 (2+1) * (1+1) = 6이며, 아무것도 착용하지 않는 경우를 제외하여 최종적으로 5가지 조합이 가능합니다.
정답은 더보기 클릭
더보기
import java.util.HashMap;
class Solution {
public int solution(String[][] clothes) {
int combinations = 1; // 조합의 수를 저장하는 변수
HashMap<String, Integer> clothesCount = new HashMap<>(); // 각 종류별 의류의 개수를 저장하는 해시맵
// 의류 배열을 순회
for (String[] item : clothes) {
String type = item[1]; // 의류의 종류를 가져옴
// 해시맵에 이미 해당 종류가 있으면, 개수를 증가
if (clothesCount.containsKey(type)) {
clothesCount.replace(type, clothesCount.get(type) + 1);
} else {
// 없으면, 해당 종류를 해시맵에 추가하고 개수를 1로 설정
clothesCount.put(type, 1);
}
}
// 조합의 수 계산
for (String key : clothesCount.keySet()) {
combinations *= clothesCount.get(key) + 1; // 각 종류별 (의류 수 + 1)을 곱함
}
return combinations - 1; // 모든 종류의 의류를 하나도 안 입는 경우를 제외
}
}
728x90
'프로그래머스(Java) > Level 2' 카테고리의 다른 글
[프로그래머스] 프로세스 (1) | 2024.07.15 |
---|---|
[프로그래머스] 멀리뛰기 (0) | 2024.07.12 |
[프로그래머스] 타겟넘버 (0) | 2024.07.09 |
[프로그래머스] 할인 행사 (0) | 2024.07.04 |
[프로그래머스] 괄호 회전하기 (0) | 2024.07.01 |