문제 풀이 및 개발 공간

[백준] 2812번 크게 만들기 (gold 3 본문

백준공부/java

[백준] 2812번 크게 만들기 (gold 3

gomduri43 2024. 3. 15. 11:13

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));
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));

        StringTokenizer st=new StringTokenizer(br.readLine());
        int n=Integer.valueOf(st.nextToken());
        int k=Integer.valueOf(st.nextToken());

        
        //결국 앞자리에 큰수가 배치되어야 큰 수이므로
        //계속 수를 받을 때마다 앞수보다 작은 수가 오는지 비교하면서
        //뒤가 크면 앞의 수 제거
        int remove=0;
        Stack<Integer> stk=new Stack<>();
        String a=br.readLine();
        for(int i=0; i<a.length(); ){
            int t=a.charAt(i)-'0';
            if(remove==k || stk.isEmpty()){
                stk.push(t);
                i++;
                continue;
            }

            while(!stk.isEmpty() && remove<k){
                int temp=stk.peek();
                if(temp<t){
                    stk.pop();
                    remove++;
                }
                else{
                    break;
                }
            }
            stk.push(t);
            i++;
        }
        //k만큼 제거해야 되는데 제거를 다 못한 경우면
        //앞은 크기 역순으로 정렬된 깔끔한 상태라 뒤에서 그만큼 제거함.
        if(remove<k){
            int end=k-remove;
            for(int i=0; i<end; i++){
                stk.pop();
            }
        }
        ArrayList<Integer> arr=new ArrayList<>(stk);
        for(Integer e: arr){
            bw.write(e+"");
        }
        bw.flush();
    }
}