개발 무지렁이

[문제풀이] Level2 위장 본문

코딩 테스트/문제풀이

[문제풀이] Level2 위장

Gaejirang-e 2023. 2. 28. 20:57

위장


  🪅 부류별 가짓수를 구할때, 부류를 key로 가짓수를 value로 생각할 수 있느냐 => HashMap
  🪅 경우의 수(조합)를 구할 수 있느냐

💡 문제 접근 과정
중요한 것은 부류별 '의상의 가짓수'이지 의상의 이름이 아니다
따라서 부류를 key로 두고 해당 부류의 가짓수를 value로 두는 HashMap을 생성

모든 부류마다 +1을 해주는 이유는 안입는 경우의 수를 포함하기 위해서이다.
마지막에 -1을 해주는 이유는 모두 안입는 경우의 수 제거를 위해서이다.

import java.util.*;
class Solution {
    public int solution(String[][] clothes) {
        int answer = 1;
        // key: 부류, value: 가짓수
        Map<String, Integer> map = new HashMap<>();

        for(int i = 0; i < clothes.length; i++) {
            // 처음 나온 부류이면 가짓수 1
            if(map.get(clothes[i][1]) == null) {
                map.put(clothes[i][1], 1);
            } else {
                // 이미 있던 부류이면 기존 가짓수 + 1
                map.put(clothes[i][1], map.get(clothes[i][1]) + 1);
            }
        }

        // 모든 부류마다 안입는 경우의 수(+1)씩 추가
        // 부류마다 동시에 할 수 있으므로 곱하기
        for(String s : map.keySet()) {
            answer *= (map.get(s) + 1);
        }

        // 모두 안입는 경우의 수(1) 빼기
        answer--;

        return answer;
    }
}
Comments