
N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오.
첫째 줄에 N과 K가 주어진다. (1 ≤ K < N ≤ 500,000)
둘째 줄에 N자리 숫자가 주어진다. 이 수는 0으로 시작하지 않는다.
입력으로 주어진 숫자에서 K개를 지웠을 때 얻을 수 있는 가장 큰 수를 출력한다.
알고리즘
탐색 과정
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;
public class BOJ2812 {
private static void solution() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
Stack<Character> s = new Stack<>();
char[] number = br.readLine().toCharArray();
for (int i = 0; i < N; i++) {
char cur = number[i];
while (!s.isEmpty() && K > 0 && s.peek() < cur) {
s.pop();
K--;
}
s.push(cur);
}
while (K > 0) {
s.pop();
K--;
}
StringBuilder sb = new StringBuilder();
for (Character c : s) {
sb.append(c);
}
System.out.println(sb.toString());
}
public static void main(String[] args) throws IOException {
BOJ2812.solution();
}
}
