문제
https://school.programmers.co.kr/learn/courses/30/lessons/42578
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 개요
코니는 다양한 옷 조합을 좋아합니다. 여러 종류의 옷을 가지고 있는 코니는 매일 다른 조합으로 옷을 입고 싶어 합니다. 각 옷은 특정 종류에 해당하며, 같은 종류의 옷은 한 번에 하나씩만 입을 수 있습니다. 최소 하나의 옷을 입어야 하며, 주어진 옷들로 서로 다른 조합의 수를 구하는 문제입니다.
접근 방법
옷의 조합을 구하기 위해서는 각 종류별로 옷의 개수를 확인하고, 각 옷을 입거나 입지 않는 경우를 계산합니다. 조합의 경우 수는 각 종류별 옷 개수 +1 (해당 종류의 옷을 입지 않는 경우 포함)로 계산할 수 있으며, 모든 종류의 옷에 대해 곱셈을 수행하여 조합 수를 구할 수 있습니다. 마지막으로 최소 하나의 옷은 입어야 하므로 모든 조합의 수에서 아무것도 입지 않은 경우(1)를 제외합니다.
해결 과정
- 종류별 옷 개수 저장
- 옷 종류별로 개수를 저장하기 위해 해시맵을 사용합니다.
- 입력된 옷 배열을 순회하며, 옷의 종류를 키로 사용해 해당 종류의 옷 개수를 누적하여 저장합니다.
- 모든 조합의 경우 수 계산
- 각 종류의 옷 개수 +1을 곱하여 모든 경우의 수를 계산합니다.
- map.size() == 1일 경우, 한 종류의 옷만 존재하므로 바로 해당 종류의 옷 개수를 반환합니다.
- 여러 종류의 옷이 있을 경우, 각 종류별로 옷을 입는 경우를 모두 곱한 후, 최소 하나의 옷은 입어야 하므로 최종적으로 1을 뺀 값을 반환합니다.
import java.util.*;
class Solution {
public int solution(String[][] clothes) {
int answer = 0;
Map<String, Integer> map = new HashMap<>();
for (int i = 0; i < clothes.length; i++) {
map.put(clothes[i][1], map.getOrDefault(clothes[i][1], 0) + 1);
}
if(map.size() == 1) {
answer = map.get(clothes[0][1]);
} else {
int n = 1;
for(String key : map.keySet()) {
n *= map.get(key) + 1;
}
answer = n - 1;
}
return answer;
}
}
'문제 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 이중우선순위큐 - Java (0) | 2024.10.27 |
---|---|
[프로그래머스] 다리를 지나는 트럭 - Java (0) | 2024.10.26 |
[프로그래머스] 110 옮기기 - Java (3) | 2024.10.19 |
[프로그래머스] 인사고과- Java (0) | 2024.10.18 |
[프로그래머스] 거스름돈 - Java (3) | 2024.10.17 |