Algorithm

[프로그래머스] 위장 Java

소스코드는 Github에서도 확인하실 수 있습니다.

 

[프로그래머스] 위장 Java

 

풀이 🚀

얼굴 동그란 안경, 검정 선글라스
상의 파란색 티셔츠

위와 같이 의상이 정해져있다고 했을 때, 가짓수는 다음과 같이 계산할 수 있다.

1. 동그란 안경을 쓰냐 안쓰냐

2. 검정 선글라스를 쓰냐 안쓰냐

3. 파란색 티셔츠를 입냐 안입냐

 

따라서 각각에 대해 안입는 경우의 수를 추가하여 +1을 하고, 마지막에 모두 입지 않는 경우를 -1 해주어 계산할 수 있다.

그 과정에서 나는 HashMap을 사용하였는데, 그 이유는 다음과 같다.

얼굴에 장착할 수 있는 의상이 두 가지가 존재하는데, 이 두가지는 동시에 착용할 수 없다.

따라서 해쉬맵에 {"얼굴": {"동그란 안경", "선글라스"}, "상의": "파란색 티셔츠"} 와 같이 저장한 뒤, 각 key별로 가진 value의 개수를 세어 +1 (입지 않는 경우)하고, 각각을 모두 합하여 마지막에 -1(모두 입지 않는 경우 빼줌)을 해 줌으로서 최종 결과값을 계산할 수 있다.

 

소스코드

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

class Solution {
    public int solution(String[][] clothes) {
        int answer = 1;
        HashMap<String, List<String>> map = new HashMap<>();
        for (String[] c : clothes) {
            String key = c[1];
            String value = c[0];
            if (map.containsKey(key)) {
                map.get(key).add(value);
            } else {
                List<String> emptyList = new ArrayList<>();
                emptyList.add(value);
                map.put(key, emptyList);
            }
        }

        for (String key : map.keySet()) {
            final List<String> values = map.get(key);
            answer *= (values.size() + 1);
        }
        
        return answer - 1;
    }
}