코딩 테스트

(Java) 프로그래머스 위장

로승리 2022. 1. 18. 05:50

의상을 조합하는 경우의 수를 어떻게 계산해야 하는지 고민했다.

결국 하나하나 따져보니 A와 B를 조합하는 경우의 수는 A * B가 되고

A를 착용하고 B는 착용하지 않거나 A를 착용하지 않고 B를 착용하는 경우도 있으니

(A+1) * (B+1)이 된다.

마지막으로 아무것도 안입는것은 허용되지 않으므로 아무것도 입지 않은 1가지를 빼주면

(A+1) * (B+1) - 1 이 된다.

 


최종 코드

import java.util.HashMap;
class Solution {
    public int solution(String[][] clothes) {
        // 곱셉을 위해 1로 초기화
        int answer = 1;

        HashMap<String, Integer> map = new HashMap<>();

        // 옷 종류별로 map에 넣기
        for (int i=0; i<clothes.length; i++) {
            map.put(clothes[i][1], map.getOrDefault(clothes[i][1], 0) + 1);
        }

        // 의상 조합 (A와 B를 조합하는 경우의 수)
        for(String key : map.keySet()) {
            answer *= map.get(key)+1;
        }

        // 아무것도 안입었을 경우 제거
        answer--;
        return answer;
    }
}