본문 바로가기
코딩/백준-자바

[자바] 백준 2812번: 크게 만들기

by 철없는민물장어 2023. 1. 1.
728x90

https://www.acmicpc.net/problem/2812

 


앞에 있는 수를 최대한 큰 수로 만들어야한다

스택을 사용한다. 

TOS의 값과 새로 넣을 값을 비교해서, 새 값이 더 작거나 같으면 그대로 push한다.

새 값이 더 크다면, 앞에있는 작은 숫자들을 뺄 수 있는 만큼(k개 제한) pop한다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;

public class P2812 {

	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());

		Stack<Integer> stack = new Stack<>();

		String num = br.readLine();

		for (int i = 0; i < n; i++) {
			int single_num = num.charAt(i) - '0';
			if (stack.isEmpty() || stack.peek() >= single_num) {
				stack.add(single_num);
			} else {
				while (!stack.isEmpty() && k > 0 && stack.peek() < single_num) {
					stack.pop();
					k--;
				}
				stack.add(single_num);
			}
		}

		if (k > 0) {
			while (!stack.isEmpty() && k > 0) {
				stack.pop();
				k--;
			}
		}

		for (int i : stack) {
			System.out.print(i);
		}
	}

}
728x90

'코딩 > 백준-자바' 카테고리의 다른 글

[자바] 백준 10610번: 30  (0) 2023.01.02
[자바] 백준 1449번: 수리공 항승  (0) 2023.01.02
[자바] 1107번: 리모컨  (0) 2023.01.01
[자바] 백준 1092번: 배  (1) 2022.12.31
[자바] 백준 1049번: 기타줄  (0) 2022.12.31

댓글