계단을 오르듯이

[JAVA] 위장 본문

알고리즘/프로그래머스

[JAVA] 위장

happyAyun 2022. 1. 7. 09:54

조합의 기본적인 문제이지만,, 새벽에 풀어서 그런가 문제를 잘못읽고 쉽지 않게 푼.. 문제..ㅎㅎ..ㅠㅠ

우선, 배열의 2차원에 종류가 들어오고 중복 체크를 위해 Map을 사용하였다.

예를 들어, 상의, 하의, 모자의 종류가 있다고 한다면 각각 하나씩 입을수도 있고, 3가지 종류 중 하나만 입을수도 있다.

이 부분을 위해 각 종류의 가짓수에 +1을 해주어 입지 않을 경우를 추가해주었다.

그 후 모든 경우의 수를 구하기 위해 모든 가짓수를 곱한 후 모든 가짓수에서 하나도 선택되지 않았을 경우 1번을 빼주면 된다.

import java.util.*;

class Solution {
    public int solution(String[][] clothes) {
        int answer = 0;
        Map<String,Integer> map = new HashMap<>();        
        for(int i=0;i<clothes.length;i++){
            String str = clothes[i][1];
            if(map.containsKey(str))
                map.replace(str, map.get(str)+1);
            else
                map.put(str,1);
        }
        List<String> keyList = new ArrayList<String>(map.keySet());
        int result = 1;
        for(String s : keyList){
            result *= (map.get(s)+1);
        }
        answer = result -1;
        return answer;
    }
}

'알고리즘 > 프로그래머스' 카테고리의 다른 글

[JAVA] 네트워크  (0) 2022.01.08
[JAVA] 타겟 넘버  (0) 2022.01.08
[JAVA] 소수 찾기(완전탐색)  (0) 2022.01.07
[JAVA] 가장 큰 수  (0) 2022.01.07
[JAVA] 기능 개발  (0) 2022.01.07