내 풀이
처음에 풀었을 때, 한 케이스가 시간초과가 나서 원인을 찾아봤는데 예시가 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);
}