728x90

https://programmers.co.kr/learn/courses/30/lessons/42578

 

코딩테스트 연습 - 위장

 

programmers.co.kr

 

Hash map 과 순열 조합을 사용하여 문제를 해결 하였습니다.

 

 

예시

 

예를들어 headgear 가 3개고 eyewear 가 4 개라고 한다면 경우의 수는 headgear 가 총 4가지 eyewear 가 총 5가지 입니다.

 

headgear (0, 1, 2, 3) eyewear (0, 1, 2, 3, 4) 

 

그렇다면 4 * 5 = 20 이라는 값이 나옵니다.

 

요기서 스파이는 매일 하루에 한벌은 입어야 한다는 가정이 있으므로 모든날 아무것도 입지않는 경우의수 1개를 뺍니다.

 

20 - 1 = 19 

 

이것을 코드로 구현 해보겠습니다.

 

package io.programmers.stackQueue;

import java.util.*;

public class Camouflage {

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

        for (String[] clothe : clothes) {
            String category = clothe[1];
            map.put(category, map.getOrDefault(category, 1) + 1);
        }

        for (Integer value : map.values()) {
            answer *= value;
        }

        return answer - 1;
    }

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

 

hashMap 의 getOrDefault 를 사용하여 해당 카테고리가 없는 경우 1 로 잡고 1을 더해주고 있는경우 그 값에서 1 을 더 합니다.

 

map 의 values 를 순회 하면서 answer 에 값을 곱해줍니다.

 

 

728x90