강의로 돌아가기
Moon Narae

시간초과

import java.util.*;
class Solution {
    int answer = 0; //결과값 : 조합의 경우의수

    public int solution(String[][] clothes) {

        //의상의 종류에 따른 개수를 담을 HashMap
        HashMap<String,Integer> map = new HashMap<String,Integer>();
        for(int i=0;i<clothes.length;i++)
            map.put(clothes[i][1], map.get(clothes[i][1]) == null ? 1 : map.get(clothes[i][1]) + 1);


        //조합
        Stack<Integer> st = new Stack<Integer>();
        for(int i=1;i<=map.size();i++)  pick(map,st,i);

        return answer;
    }

    public void pick(HashMap<String,Integer> map,Stack<Integer> st,int r){
        if(r==0){
            int ans = 1;
            for(int i:st){
            System.out.println(i);
                ans=ans*(Integer)map.values().toArray()[i];

            }
            answer+=ans;            
        }   

        int smallest = st.isEmpty() ? 0 : st.lastElement() + 1; 

        for(int next = smallest; next < map.size(); next++){
            st.push(next);
            pick(map,st,r - 1);
            st.pop();
        } 

    }
}

코드가 이건데 테스트케이스 28개 중에서 한개가 시간초과가 떠서 넘어가질 않네요..ㅠㅠ
이 방법 말고는 다른 방법이 아예 생각이 안나는데 시간 초과가 뜨는 이유가 뭘까요

0 개의 답변
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.