프로그래머스 큰 수 만들기 JavaScript

김건호·2021년 10월 5일
0
post-custom-banner

문제링크

내 풀이
처음에 풀었을 때, 한 케이스가 시간초과가 나서 원인을 찾아봤는데 예시가 9999999999일때 시간초과가 발생한다는 얘기를 들어서 9를 찾으면 그냥 넘어가도록 추가하였다.

function solution(number, k) {
    var answer = '';
    var start=0; var end=k; var n=number.length;
    var max=0; var index=0;
    for(var i=0 ; i<n-k ; ++i) {
        for(var j=start ; j<=end ; ++j) {
            if(max<number[j]) {
                max=number[j];
                index=j;
                if(max==9)
                    break;
            }
        }
        answer+=max;
        start=index+1; ++end;
        max=0;
    }
    return answer;
}

4 1 7 7 2 5 2 8 4 1
의 경우에서 n-k는 6이다
따라서 맨 뒤 5개 빼고 앞에서 최대값을 찾아서 answer에 추가한다.

7인 3번째 요소가 선택되고 그 다음 값부터 한개는 이미 선택 되었으니 맨 뒤 4개를 빼고 같은 방법으로 최댓값을 구한다.

제출하고 다른 사람의 풀이를 봤는데 스택으로 해결한듯 하다.
그래서 나도 해봤다.

function solution(number, k) {
    var answer = '';
    var stack=[];
    var delCount=0;
    for(var i=0 ; i<number.length ; ++i) {
       if(stack.length==0) {
           stack.push(number[0]);
           continue;
       }
      // 현재요소가 스택의 마지막 요소보다 크다면
        while(stack[stack.length-1]<number[i]) {
            stack.pop(); // 제거 후 삽입
            ++delCount;
            if(delCount==k) return stack.join("") + number.slice(i,number.length); // k개만큼 제거했다면
            if(stack.length==0) break;
        }
        stack.push(number[i]);
    }
    return stack.join("").slice(0, number.length - k + delCount);
}
profile
Ken, 🔽🔽 거노밥 유튜브(house icon) 🔽🔽
post-custom-banner

0개의 댓글