본문 바로가기
Language/알고리즘 문제풀이

프로그래머스 위장(Java)

by wakestand 2019. 9. 18.
반응형

사이트명 : 프로그래머스(Programmers)

문제명 : 위장

언어 : 자바(Java)

 

위장 문제에서 포인트는

옷 종류는 여러개인데 하나씩 입어도 되긴 하는데

하나도 입지 않을 수는 없을 때

공식이 어떻게 되지?

 

난 수학시간에 취미가 자는거라

이게 굉장히 어렵더라

 

어쨌든 내 풀이방법은 아래와 같은데

 

일단 옷 종류에 따른 모든 경우의 수 구하는 공식은(옷 안입는 것 까지)

( 옷 종류별 합계 + 1 ) * ( 옷 종류별 합계 + 1 ) ... 옷 종류에 따라 계속 추가

이렇게 하는데

 

여기서 아무것도 선택하지 않는 경우는 해당이 안되므로

답에서 -1을 해주면 된다

 

map을 사용해 옷 이름이 무엇인지는 상관없이 옷 유형만 같으면

기존 값에 +1 해주는 식으로 사용한다

 

이후 list에 옷 종류별 합계를 차례대로 넣어준 뒤

위에 적은 (옷 종류별 합계 + 1) * (옷 종류별 합계 +1) 을 해 주고

마지막에 -1을 해서 반환한다

 

마지막으로 프로그래머스에 바로 적용할 수 있는 코드는 아래와 같다

 

import java.util.ArrayList;
import java.util.HashMap;
class Solution {
    public int solution(String[][] clothes) {
        int answer = 1;
        int incre = 0;
        ArrayList<Integer> list = new ArrayList<>();
        
        HashMap<String, Integer> map = new HashMap<>();
        for(int i = 0; i<clothes.length; i++) {
        	if(map.get(clothes[i][1]) != null) { //  
        		incre = map.get(clothes[i][1]) + 1;
        	} else {
        		incre = 1;
        	}
        	map.put(clothes[i][1], incre);
        }
        
        for( String key : map.keySet() ){
            list.add(map.get(key));
        }
        
        for(int i = 0; i<list.size(); i++) {
        	answer = answer * (list.get(i) + 1); // 모든 경우의 수 
        	if(i == list.size() - 1) { // 아무것도 선택하지 않는 경우 제외
        		answer = answer - 1;
        	}
        }
        
        return answer;
    }
}
반응형

댓글