알고리즘/문제풀기

[프로그래머스] 위장 - 해시

hyun_jo_o 2019. 4. 17. 23:38

문제를 이해하고 경우의 수를 모두 구해야하는 줄 알고 복잡한 문제라고 생각했다.

그런데 질문하기에서 훨씬 접근하기 쉬운 방법을 찾았고 코드를 짜기 시작했다.

 

※ 문제를 쉽게 해결 할 수 있었던 꿀팁!!

머리:3, 얼굴:2, 옷:1 이라면 총 가능한 개수는

(3+1) * (2+1) * (1+1) -1 = 23 으로 계산 할 수 있다.

+1씩 더한 이유는 착용하지 않은 경우를 추가한 것이고,

마지막에 -1을 해준 이유는 모든 부위를 입지 않은 경우는 없기 때문이다.

 

위 공식을 사용해서 아래처럼 코드를 짰다.

class Solution {
    public int solution(String[][] clothes) {
        int answer = 0;
        HashMap<String, Integer> clothesmap = new HashMap<>();	//옷의 종류를 key에, 한 종류의 갯수를 value에 저장하는 hashmap
        int count = 1;		//곱셈을 위한 변수
        for(int i=0; i<clothes.length; i++) {
            String type = clothes[i][1];		//옷의 종류를 type변수에 저장
            if(!clothesmap.containsKey(type)) {		//key에 같은 종류의 옷이 있지 않다면
                clothesmap.put(type, 0);		//옷의 종류와 0을 넣어줌
            }
            clothesmap.put(type, clothesmap.get(type)+1);	//같은 종류가 있다면 +1한 값을 넣어줌
        }
        for(String str : clothesmap.keySet()) {		//종류별로 값을 받아와서 계산을 해준다.
            count *= clothesmap.get(str) + 1;
        }
        answer = count -1;
        return answer;
    }
}

 

 

 

아~~주 시원한 통과를 볼 수 있었다!!!