티스토리 뷰
음...일단 도대체 왜 어제 풀었던 <완주하지 못한 선수>와 같은 LV인지 모르겠다. 같은 원리로 푸는 건 인정하나, 애초에 들어가는 기본 원리 자체가 나는 이해하기 꽤나 힘들었다.
처음엔 도저히 감이 안와서 하나씩 카운트하며 경우의 수를 모두 세려고 생각했다. 하지만 for 문이 최소 3개 이상은 들어갈 게 분명해서(이는 99.99%의 확률로 테스트 케이스를 통과하지 못한다.) 다른 방법을 고민했다.
그렇게 해서 도출한게, 바로 경우의 수 공식!(확통을 제대로 공부하여 안 까먹었다면 바로 나왔겠지....)
경우의 수 공식:
위와 같이, 4종류의 옷을 각각 A, B, C, D 개씩 가지고 있다면, 옷을 모두 벗는 경우를 제외하고 모든 경우의 수는
(A + 1)(B + 1)(C + 1)(D + 1)이다.
Input은 {Glasses, EyeWear} 과 같이 들어가므로, 모든 옷의 종류를 한번씩 확인하여 Map에 넣고, 중복된 종류의 옷이 나올 경우, value값을 +1 해주면 된다.
즉,
Code:
import java.util.HashMap;
public class Solution {
public int solution(String[][] clothes) {
int answer = 1; //곱셈을 위한 1, 0은 곱셈을 할 수 없으므로
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);
//HashMap.getOrDefault => 해당 키의 값이 있으면 그 값을 반환하며, 없다면 정해놓은 Default값을 반환
}
for(String iter : hm.keySet()) {
answer *= (hm.get(iter) + 1);
}
answer -= 1;
return answer;
}
}
상당히 만족스러운 결과를 얻을 수 있다. (어려워...)
반응형
'[JAVA] > Programmers' 카테고리의 다른 글
[JAVA] Programmers <Stack_LV2> 주식 가격 (0) | 2021.03.25 |
---|---|
[JAVA] Programmers <Queue_LV2> 다리를 지나는 트럭 (0) | 2021.03.25 |
[JAVA] Programmers <Hash_LV3> 베스트 앨범 (0) | 2021.03.25 |
[JAVA] Programmers <Hash_LV2> 전화번호 목록 (0) | 2021.03.25 |
[JAVA] Programmers <Hash_LV1> 완주하지 못한 선수 (0) | 2021.03.25 |
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
- redux
- 맛집
- 파니노구스토
- 인천 구월동 이탈리안 맛집
- redux-thunk
- AsyncStorage
- Async
- javascript
- Promise
- 인천 구월동 맛집
- react-native
- react
- 이탈리안 레스토랑
- 정보보안기사 #실기 #정리
- await
- Total
- Today
- Yesterday