[프로그래머스] 가장 큰 수 만들기

2020. 3. 25. 13:48프로그래머스/LEVEL 2

class Solution {
    public String solution(String number, int k) {
        String answer = "";
        int deleteCount =0;
        StringBuilder sb = new StringBuilder(number);
        
        for(int i=0; i<number.length()-1; i++){
            if(deleteCount == k ){
                break;
            }
            if(sb.charAt(i)<sb.charAt(i+1)){
                sb.deleteCharAt(i);
                deleteCount ++;
                i=-1; // 다시 처음부터 비교
            }
            
        }  
        answer = sb.toString();
        answer = answer.substring(0,number.length()-k); //내림차순 정렬되어있어서 deletecount가 줄지않았을경우 
        return answer;
    }
}

 

Test Case 10 : 시간초과 

 

수정코드

class Solution {
    public String solution(String number, int k) {
        String answer = "";
        int deleteCount = 0;
        int idx=1;
        StringBuilder sb = new StringBuilder(number);
        
        while(deleteCount != k){
            if(idx >= 1 && sb.charAt(idx-1)<sb.charAt(idx)){
                sb.deleteCharAt(idx-1);
                deleteCount ++;
                idx--;
            }
            else{
                /* idx가 끝값까지 갔을때 deleteCount가 도달되지 못했을때 */
                if(idx == sb.length() - 1 && sb.charAt(idx) <= sb.charAt(idx-1)) {
					return sb.toString().substring(0,number.length()-k);
				}
				else { // idx가 0 일때 다시 다음값부터 비교할 수 있도록 1 증가시킴 
					idx ++;
				}
            }    
        }
        
        answer = sb.toString();
        
        
        return answer;
    }
}

숫자를 줄여 나가던 중 뒤에값이 앞에값보다 작거나 같은경우가 지속되어 

answer의 길이가 number-k길이보다 길어지게 되면 쓸데없는 시간이 걸린다.

확정된 answer의 길이가 number-k길이만큼 되면 거기서 substring을 통해 답을 확정 짓고 끝낸다. 

'프로그래머스 > LEVEL 2' 카테고리의 다른 글

[프로그래머스] 프린터  (0) 2020.03.27
[프로그래머스] 피보나치 수  (0) 2020.03.27
[프로그래머스] 기능개발  (0) 2020.03.25
[프로그래머스] 타겟넘버  (0) 2020.03.24
[프로그래머스] 주식가격  (0) 2020.03.24