99클럽 코테 스터디 1주차 보너스문제 TIL
💙 JAVA 비기너
import java.util.Map;
import java.util.HashMap;
import java.util.Map.Entry;
class Solution {
public int solution(String[][] clothes) {
int answer = 1;
Map<String, Integer> clothMap = new HashMap<String, Integer>( );
for(String[] cloth : clothes) {
clothMap.put(cloth[1], clothMap.getOrDefault(cloth[1] , 0) + 1);
}
for (Entry<String, Integer> entry : clothMap.entrySet()) {
answer *= entry.getValue() + 1;
}
return answer - 1;
}
}
만약에 상단에 해시라고 적혀있지 않았으면 리스트를 통해 풀다가 꽝꽝 막혔을 것 같다. 다행이 해시라고 힌트가 적혀있었고 오랜만에 보는 해시에 당황하는 것도 찰나 검색하니 많은 사람들이 정말 깔끔하게 정리를 해놔서 그저 복붙해오면 되었다.(어이;;)
HashMap
은 유니크한 key
와 그에 해당하는 value
로 정해져있기 때문에 여러값을 관리해야하는 문제에 적합하다.
먼저 2차원 배열인 clothes
를 foreach문을 통해 HashMap
인 clothMap
에 옷의 종류에 따라 정리했다.
처음 기본값을 어떻게 가져가야할까?
키가 있으면 값을 가져오고 없으면 0으로 만드는 로직을 하나 더 짜야하나?
하면서 구글에 "java hashmap 기본값"을 검색해오니 HashMap.getOrDefault()
를 잘 설명해준 사람들이 많았다.
HashMap.getOrDefault(키, 기본값)
을 하면 우선적으로 키에 대한 값을 반환하고 해당 키에 대한 값이 없다면 기본값으로 셋팅해준다.
이렇게 옷의 종류에 따라 키에는 옷의 종류를 값으로는 옷의 가지수를 넣게 셋팅해줬다.
for(String[] cloth : clothes) {
clothMap.put(cloth[1], clothMap.getOrDefault(cloth[1] , 0) + 1);
}
HashMap
을 foreach문으로 Entry
로 가져올 수 있는 것도 구글링의 결과...ㅎ
HashMap
을 하나씩 돌면서 옷 가짓수 + 1을 하여 answer
에 곱해줬다.
경우의 수를 구하는 방식은 모든 가짓 수를 곱하는 것인데 이 문제에서는 그 가짓수가 없는 경우도 포함되어야 하기 때문에 1을 추가해서 곱해줬다.
for (Entry<String, Integer> entry : clothMap.entrySet()) {
answer *= entry.getValue() + 1;
}
그리고 모든 옷이 없는 경우를 없애야하기 때문에 answer
에 - 1을 하여 반환했다.
HashMap
오랜만에 보니 반갑기도 하고 다 까먹어서 앗차 싶기도 했다. 요즘 계속 문자열 문제만 보다가 만나니 새로워서 더 반가웠던 것 같다. 오랜만에 퀘퀘 묵었던 기억들이 검색을 통해 떠오르게 되니 재밌기도 했고 HashMap.getOrDefault()
라는 새로운 함수를 알게 되었서 기뻤다.
📑 참고자료