[백준] 2812: 크게 만들기 - JAVA
https://www.acmicpc.net/problem/2812
풀이
스택을 이용하는 그리디 문제였다.
N 자리 숫자에서 숫자 K 개를 지웠을 때의 최댓값을 구해야 한다.
숫자를 입력받으면서 stack에 하나씩 넣는다.
뺄 수 있는 개수(K)가 남아있고 stack의 끝값이 자신보다 작으면 그 값을 빼고 넣는다.
다만 N이 987654321과 같이 주어지면 stack에 들어가기만 하고 빠지는 숫자는 없다.
따라서 stack의 사이즈 - K 만큼 출력해 주어야 한다.
출력할 때 앞에서부터 빼기 위해서 stack 대신 deque을 이용했다.
메모리: 36464KB
시간: 380ms
언어: Java 11
코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) 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());
Deque<Integer> dq = new ArrayDeque<>();
String line = br.readLine();
for (int i = 0; i < N; i++) {
int now = line.charAt(i) - '0';
while (!dq.isEmpty() && K > 0 && dq.getLast() < now) {
dq.removeLast();
K--;
}
dq.addLast(now);
}
StringBuilder sb = new StringBuilder();
while (dq.size() > K) {
sb.append(dq.removeFirst());
}
System.out.println(sb);
}
}