프로그래머스>코딩테스트 연습>고득점 Kit>해시 : 위장 - https://programmers.co.kr/learn/courses/30/lessons/42578
옷 조합의 경우의 수를 나열하는 것이 아니라 조합의 개수 만 알아내면 되기 때문에, 단순히 종류별 옷의 개수를 구한 뒤 전부 곱해주는 방식으로 풀이했다.
예를 들어 상의가 2개, 하의가 3개 있다면 상의를 0개/1개/2개 입는 경우와 하의를 0개/1개/2개/3개 입는 경우의 수가 생기는데, 각각을 곱하면 3x4 = 12가지의 경우의 수를 얻을 수 있다. 다만, 하루에 최소 한 개의 의상은 입는다
라는 조건이 있기 때문에 12에서 -1을 해주어 최종 결과값은 11이 된다.
import java.util.HashMap;
class Solution {
public static int solution(String[][] clothes) {
int answer = 1;
HashMap<String, Integer> hash = new HashMap<>();
// type별로 옷 종류가 몇개인지 세기
for(int i=0; i<clothes.length; i++){
String cloth_type = clothes[i][1];
hash.put(cloth_type, hash.getOrDefault(cloth_type, 1) + 1);
}
for (String key : hash.keySet()) {
answer *= hash.get(key);
}
return answer-1;
}
}
✔ 알고리즘 분류 - 해시
✔ 난이도 - Level 2
hash.getOrDefault() : 가져오거나 default값 주거나~
HashMap<String, Integer> hash = new HashMap<>();
hash.put(cloth_type, hash.getOrDefault(cloth_type, 1) + 1);
딱히 없음
문제를 너무 복잡하게 생각해서ㅜㅜ 혼돈에 빠져있었는데 명쾌하고 깔끔한 풀이랑 코드 보고 많은 도움 받아갑니다! 감사합니다 !