[java] 프로그래머스 "위장" 코테 연습 해시

jwmah·2021년 2월 23일
0

알고리즘

목록 보기
1/1


문제 해결:

우선 잘 생각해보면 옷의 종류와 해당 옷 종류의 옷 개수만 필요한 정보이다. 그리고 위 두 정보들을 hashmap의 key, value로 정리하자.
그 뒤에 생각해 볼 것은 모든 옷 조합 갯수 계산인데, 각 옷 종류에서 모든 경우의 수는 하나도 안입을 경우, 하나를 입을 경우인데, 예시를 들어보겠다.

key | value
상의 3
하의 2

위와 같이 hashmap에 저장됬다고 하자. 그러면 상의의 모든 경우의 수는 상의 안입기, 첫번째 상의 입기, 두번째 상의 입기, 세번째 상의 입기가 될 것이다. 이렇게 계산해보면 위의 예시에서는 총 4*3=12 가지의 조합 수가 나오게 된다. 문제의 조건 중에서 옷은 최소 한 개는 입어야 한다고 했으니 상의, 하의 모두 안입는 경우의 수 한 번, 1을 빼준 11가지 조합이 가능하다고 볼 수 있다.

내 코드:

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;
    }
}

HashMap에 clothes배열의 옷 종류 문자열을 key로 넣었고, value는 해당 key의 갯수를 넣었다. getOrDefault 함수를 사용하여 해시맵에 처음 들어오는 옷 종류 문자열이면 value를 1로 해줬고, 이미 존재하는 옷 종류가 다시 들어오면 카운터처럼 value 값을 1 더해서 넣었다. 그리고 key들을 순회하며 value + 1을 곱했고, 마지막에 1을 빼줬다.
조합 개수 구하는 곳에서 한참 막혔었다...열공하자

0개의 댓글