반응형
https://school.programmers.co.kr/learn/courses/30/lessons/42578
[문제요약]
- 스파이는 하루에 최소 한 개의 의상은 입습니다.
- clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다.
- 옷들의 조합의 수를 반환하세요.
[문제풀이]
저는 먼저 해쉬맵에 옷의 종류별로 담아뒀습니다.
[["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]
예시와 같은 상태에선,
{"headgear":["yellow_hat", "green_turban"], "eyewear":["blue_sunglasses"]}
같이 배열에 구성되도록이요!!
이렇게 되면 이제 경우의 수를 전부 구하면 됩니다. 경우의 수를 왜 구하는가.
예시에서는 헤드기어가 총 2개 존재합니다. 스파이는 총 3가지의 경우의수가 있겠죠?
1.yellow_hat을 쓴다.
2. green_turban을 쓴다.
3. 아무것도 쓰지 않는다.
안경은 총 1개 존재하니 경우의 수는 다음과 같을 겁니다.
1. blue_sunglasses"를 쓴다.
2. 아무것도 쓰지 않는다.
그렇다면 총 3 X 2가지의 경우의수가 존재하겠죠? 하지만 조건에서는 스파이는 아무것도 입지않는 날은 없고 하루에 최소 한개의 옷은 입는다 라는 조건 때문에, 둘다 아무것도 쓰지 않는 경우는 제외시켜야합니다.
따라서 3 X 2 - 1 = 5 가지의 경우의 수가 정답이 되게 됩니다.
[코드]
import java.util.*;
class Solution {
public int solution(String[][] clothes) {
int answer = 1;
HashMap<String, Integer> hm = new HashMap<>();
for(int i =0; i<clothes.length; i++){
hm.put(clothes[i][1], hm.getOrDefault(clothes[i][1],0) + 1);
}
for(String key : hm.keySet()) {
answer *= hm.get(key) + 1
}
return answer-1;
}
}
반응형
'문제풀이' 카테고리의 다른 글
문자열 폭발 - 문자열 (2) | 2023.04.18 |
---|---|
롤케이크_자르기-구현 JAVA (0) | 2023.04.10 |
부대복귀-BFS (0) | 2023.03.28 |
2589-보물섬 (0) | 2023.03.21 |
11060-점프점프 (0) | 2023.03.16 |
댓글