알고리즘/JAVA

[JAVA] 위장 - 프로그래머스

야아옹 2020. 11. 17. 16:59

 

풀이 :  C# 에서 풀었던기억으로 경우의 수인것은 알았으나 공식을 못풀었다... 예전에 올려놓은 것도 이해가 안됨.. 하하

         1. 입지 않는다의 경우의 수를 추가한다!

             ex) 얼굴(동그란안경, 검정 선글라스, 입지않음)

                  상의(파란색 티셔츠, 입지 않음)

                  하의(청바지, 입지 않음)

                  겉옷(긴 코트, 입지 않음)

         2. 각 부위별 수를 곱한다!(전체 개수 구하기)

             얼굴(3) * 상의(2) * 하의(2) * 겉옷(2)

         3. 최소 하루에 한개의 의상을 입으니 입지않음 의 경우의 수를(1) 뺀다.

         => (종류별 + 1) 들을 곱하고 마지막 -1

 

package com.company;

import java.util.HashMap;

public class SPY {

    static String[][] clothes = {{"yellow_hat", "headgear"}, {"blue_sunglasses", "eyewear"}, {"green_turban", "headgear"}};
    public static void main(String[] args) {
        System.out.println(solution(clothes));
    }

    public static int solution(String[][] clothes) {
        int answer = 1;
        int clothesCount = 0;
        HashMap<String, Integer> _hashmap = new HashMap<>();

        for (int i = 0; i < clothes.length; i++)
        {
            String kinds = clothes[i][1];
            if (_hashmap.containsKey(kinds))
            {
                clothesCount = _hashmap.get(kinds);
                _hashmap.put(kinds, ++clothesCount);
            }
            else
            {
                clothesCount = 0;
                _hashmap.put(kinds, ++clothesCount);
            }
        }

        for (String _key: _hashmap.keySet()) {
            answer *= (_hashmap.get(_key) + 1);
        }

        return answer - 1 ;
    }
}