티스토리 뷰

반응형

프로그래머스 알고리즘 - 위장

프로그래머스 위장 문제 링크


입출력 예제를 자세히 보게 되면 출력은 경우의 수가 몇개인지 반환하면 되는 문제이므로 실제로 어떤 조합으로 꾸려야 하는지는 중요하지 않습니다. 같은 종류의 의상이 몇개인지 파악하고 의상 종류의 갯수를 모두 곱하면 경우의 수를 구할 수 있습니다. 다만, 적어도 한가지 의상은 입어야 하므로 아무것도 입지 않은 경우 한가지를 제외 합니다.


예를들어 첫번째 입력 예제 같은 경우, 

  • eyewear : blue_sunglasses (1가지)
  • headgear : yellow_hat, green_turban (2가지)

총 3가지 의상이 있습니다만, 입지 않은 경우의 수도 고려 해야 하므로,

  • eyewear : 2가지
  • headgear : 3가지

라고 판단합니다. 2x3은 6가지 경우의 수가 나오고 아무 것도 입지 않은 경우는 없으므로 한가지 경우의 수를 제거하고 정답은 5가 됩니다.

풀이 코드 (java)

HashMap을 이용하여서 '의상 종류'가 key이고, 해당 의상 종류의 '갯수'를 value로 설정합니다. 그리고 설정해둔 value를 위에 설명해둔 과정으로 계산하고 결과 값을 리턴합니다.

class Solution {
    public int solution(String[][] clothes) {
        int answer = 1;
        HashMap<String, Integer> hashMap = setCountOfClotheType(clothes);
        for (Map.Entry<String, Integer> stringIntegerEntry : hashMap.entrySet()) {
            answer *= stringIntegerEntry.getValue();
        }
        return answer - 1;
    }

    private HashMap<String, Integer> setCountOfClotheType(String[][] clothes) {
        HashMap<String, Integer> map = new HashMap();
        for (String[] clothe : clothes) {
            String type = clothe[1];

            if (map.containsKey(type)) {
                map.put(type, map.get(type) + 1);
            } else {
                //안입는 것도 포함하기 때문에 2부터 시작
                map.put(type, 2);
            }
        }
        return map;
    }
}

배운점

  • 이런 식의 키와 밸류 식의 자료구조인지 확인해보고 적절히 Map을 사용하는 것이 좋다는 것을 배웠다.
  • 자칫 잘 못 이해했으면, 경우의 수를 직접 구하는 줄 알 수 도 있었는데, 침착하게 생각해냈다. 이전에 배웠던 점에 쓴 '반환값의 타입을 자세히 보자'를 기억해서 좋았다.

반응형
댓글