본문 바로가기
Etc/Algorithm

[Java] 프로그래머스 : 위장

by 달의 조각 2022. 10. 10.
프로그래머스 : 위장

 

 

문제 분석

  • 상의, 하의, 겉옷 등의 큰 분류 안에 여러 의상이 존재할 때, 입을 수 있는 조합의 수를 계산한다.
  • Map을 생성하고, Key는 의상 분류, Value는 분류에 해당하는 의상의 수를 넣는다.
  • 경우의 수는 각 Key의 Value들의 곱이다.
    • 이때 겉옷은 입지 않고 상의와 하의만 입는 경우의 수도 있다. 각 옷의 개수에 + 1(안 입는 경우)
    • 아무것도 입지 않는 경우는 없다. 전체에서 - 1
    • (상의의 수 + 1) x (하의의 수 + 1) x (겉옷의 수 + 1) - 1

 

문제 풀이

import java.util.*;

class Solution {
    public int solution(String[][] clothes) {
        
        //옷의 종류를 Key로 하고, 해당하는 옷의 개수를 Value로 하는 Map을 생성한다
        Map<String, Integer> map = new HashMap<>();
        for (int i = 0; i < clothes.length; i++) {
            if (!map.containsKey(clothes[i][1]))
                map.put(clothes[i][1], 1);
            else
                map.put(clothes[i][1], map.get(clothes[i][1]) + 1);
        }

        // Map의 Value에 접근하여 모든 개수를 곱한다
        // 한 종류의 옷을 입는 경우의 수는 (옷의 개수 + 하나도 안 입는 경우)이다
        int multiplication = 1;
        Iterator<String> iterator = map.keySet().iterator();
        while (iterator.hasNext()) {
            String key = iterator.next();
            multiplication *= map.get(key) + 1;
        }

        // 아무것도 입지 않는 경우는 없으므로 결과에서 1을 뺀다
        return multiplication - 1;
    }
}

댓글