코딩테스트 연습 > 해시 > 의상
https://school.programmers.co.kr/learn/courses/30/lessons/42578
옷의 종류와 이름이 있는 2차원 배열 clothes가 주어진다. 이 때, 각 종류별로 최대 1가지 의상을 착용할 수 있고, 하루에 최소 한 개의 의상을 입는다.
서로 다른 조합의 수를 return 하라.


옷의 종류 -> Key
종류의 개수 -> value
를 삼는 HashMap을 생성한다. 이를 통해 종류의 개수를 이용하여 조합을 구한다.
(종류의 개수 + 안입는 경우) x (다른 종류의 개수 + 안입는 경우)...
그리고 전체 다 안입은 경우를 빼기 위해 최종 값에 -1을 한다.
import java.util.HashMap;
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;
}
}
처음 이 문제를 접했을 때는 옷의 명칭을 key, 종류를 value로 잡고, value가 겹치면 해당 조합은 count하지 않는 방식으로 접근했다. 하지만 이 방법은 종류의 개수가 3개인 조합일 땐 어려워져 결국 구현 조차 하지 못했다. 그래서 다른 사람이 풀어 놓은 것을 보았다.
문제의 해답으론 key -> 종류, value -> 종류의 갯수로 잡고 푸는 것이다.
앞으로 '조합'의 갯수를 알아내야하는 문제를 풀 땐, key -> 종류, value -> 종류의 갯수로 풀어야겠다.
