레벨 2
https://programmers.co.kr/learn/courses/30/lessons/42578
문제 접근
여러 종류의 옷이 있고, 각 종류 별로 1개 이하를 입을 수 있다면 몇가지 옷이 가능하냐는 문제
예제#1을 단순화하면
headergear는 총 2개 있으니, 스파이에게 총 3가지 경우의 수가 있다
eyewear는 총 2개 있으니, 스파이에게 총 2가지의 경우의 수가 있다
그렇다면 총 3*2=6가지 인데 아무것도 입지 않은 경우 제거하면 5가지가 된다.
결론 : 해시를 통해 각 type 별로 가짓수를 계산하고 총 경우의 수를 산출한다.
풀이 방법
1. 가짓수를 저장한다.
HashMap<String, Integer> map = new HashMap<>();
for (String[] clothe : clothes) {
String type = clothe[1];
map.put(type, map.getOrDefault(type, 0) + 1);
}
여기서 getOrDefault는 찾는 키가 존재하면 값을 반환하고 없다면 기본값(0)을 반환하는 메서드이다.
// 방법 1) value 목록을 리스트로 만들어 밸류리스트로 사용
List<Integer> list = new ArrayList<>(map.values()); // 맵에서 가짓수 뽑아 리스트로 변환
int answer = 1;
for (Integer i : list) {
answer *= i + 1; // 입지 않은 경우의 수를 추가 +1
}
// 방법 2) keySet으로 value를 가져오는 방법
// for(String key :map.keySet()){
// answer*=(map.get(key)+1);
// }
return answer - 1; // 아무것도 입지 않을 경우에 해당하는 수 1을 뺀다.
import java.util.*;
class Solution {
public int solution(String[][] clothes) {
HashMap<String, Integer> map = new HashMap<>();
for(String[] clothe: clothes){
String type = clothe[1];
map.put(type, map.getOrDefault(type,0)+1);
}
// 방법 1) value 목록을 리스트로 만들어 밸류리스트로 사용
List<Integer> list = new ArrayList<>(map.values());
int answer = 1;
for (Integer i : list) {
answer *= i + 1;
}
// 방법 2) keySet으로 value를 가져오는 방법
// for(String key :map.keySet()){
// answer*=(map.get(key)+1);
// }
return answer-1;
}
}
https://coding-grandpa.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%9C%84%EC%9E%A5-%ED%95%B4%EC%8B%9C-Lv-2-%EC%9E%90%EB%B0%94-Java
https://junghn.tistory.com/entry/JAVA-Map-getOrDefault-%EC%9D%B4%EB%9E%80-%EC%82%AC%EC%9A%A9%EB%B2%95-%EB%B0%8F-%EC%98%88%EC%A0%9C
https://codechacha.com/ko/java-convert-map-to-list/