#include <string>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
string solution(string number, int k) {
string answer = "";
int n_length = number.length() - k, i=0;
stack<char> s;
s.push(number[i++]);
while(i < number.length())
{
char ch = s.top();
if(ch < number[i]){
while(!s.empty() && k>0)
{
if(s.top() >= number[i]) break;
s.pop();
k--;
}
}
s.push(number[i++]);
}
while(s.size() != n_length) s.pop();
while(!s.empty())
{
answer = s.top() + answer;
s.pop();
}
return answer;
}
- key point!
1) 내가 stack에 넣어 놓은 수 (s.top()
) 보다 지금 읽는 수(number[i]
)가 더 크다면 앞으로 와야함
--> 그 순간 순간에 최적인 경우를 선택하는 것임 (그때 그때 큰 수를 선택!)
--> Greedy algorithm