티스토리 뷰

 

음...일단 도대체 왜 어제 풀었던 <완주하지 못한 선수>와 같은 LV인지 모르겠다. 같은 원리로 푸는 건 인정하나, 애초에 들어가는 기본 원리 자체가 나는 이해하기 꽤나 힘들었다. 

처음엔 도저히 감이 안와서 하나씩 카운트하며 경우의 수를 모두 세려고 생각했다. 하지만 for 문이 최소 3개 이상은 들어갈 게 분명해서(이는 99.99%의 확률로 테스트 케이스를 통과하지 못한다.) 다른 방법을 고민했다.

그렇게 해서 도출한게, 바로 경우의 수 공식!(확통을 제대로 공부하여 안 까먹었다면 바로 나왔겠지....)

 

경우의 수 공식: 

위와 같이, 4종류의 옷을 각각 A, B, C, D 개씩 가지고 있다면, 옷을 모두 벗는 경우를 제외하고 모든 경우의 수는

(A + 1)(B + 1)(C + 1)(D + 1)이다.

Input은 {Glasses, EyeWear} 과 같이 들어가므로, 모든 옷의 종류를 한번씩 확인하여 Map에 넣고, 중복된 종류의 옷이 나올 경우, value값을 +1 해주면 된다. 

즉,

 

Code: 

import java.util.HashMap;


public class Solution {
    public int solution(String[][] clothes) {
        int answer = 1;   //곱셈을 위한 1, 0은 곱셈을 할 수 없으므로
        HashMap<String, Integer> hm = new HashMap<>();
        for(int i = 0; i < clothes.length; i++) {
        	hm.put(clothes[i][1],  hm.getOrDefault(clothes[i][1], 0)+1);
            //HashMap.getOrDefault => 해당 키의 값이 있으면 그 값을 반환하며, 없다면 정해놓은 Default값을 반환
        }
        	for(String iter : hm.keySet()) {
        		answer *= (hm.get(iter) + 1);
        	}
        	answer -= 1;
        return answer;	
        }
    }

상당히 만족스러운 결과를 얻을 수 있다. (어려워...)

 

 

반응형
Comments