Sangil's blog

https://github.com/ChoiSangIl Admin

프로그래머스 연습문제 해시 위장 자바(JAVA) DEV / ALGORITHM

2020-07-18 posted by sang12


프로그래머스 연습문제 위장 해답입니다. 

조합을 다시 공부하게되었습니다...큽

스파이가 하루에 한번씩 옷을 입는데, 매일 다른 옷을 입어야 해서 스파이가 가진 옷으로 몇개의 조합을 할 수 있냐?라는 문제입니다. 2차원 배열로 스파이가 입은 옷이 주어집니다.

해결 방법으로는 일단 조합을 알아야 합니다.

얼굴동그란 안경, 검정 선글라스
상의파란색 티셔츠
하의청바지, 반바지
겉옷긴 코트

위와 같이 스파이가 입은 옷이 주어지게 됩니다. 

얼굴, 상의, 하의, 겉옷에서 1개를 선택하는 경우의 수에서 안입는 경우의 수를 포함해 +1을 해줍니다. 그리고 최소한 1개의 옷을 입는다고 했으니, 모두 안입을 경우의수 -1을 해줍니다. 수식으로 보면 아래와 같습니다 (얼굴, 상의, 하의 겉옷 순) 

((2C1+1) * (1C1+1) * (2C1+1) * (1C1+1)) -1

위에 식을 보면 옷의 종류 카운트 수 + 1 을 해서 종류별 경우의수를 다 곱해주고 -1을 해주면 됩니다. 소스는 아래와 같습니다.

import java.util.HashMap;
import java.util.Map;

class Solution {
    public int solution(String[][] clothes) {
        Map<String, Integer> clothes_count = new HashMap<String, Integer>();
		int answer = 1;
		
		for(String[] cloth : clothes) {
			String key = cloth[1];
			if(clothes_count.containsKey(key)) {
				clothes_count.put(key, clothes_count.get(key) + 1);
			}else {
				clothes_count.put(key, 1);
			}
		}
		
        for( String key : clothes_count.keySet() ){
        	answer = answer * (clothes_count.get(key) + 1); 
        }
        return answer-1;
    }
}

#프로그래머스 스파이 문제
REPLY