Notice
Recent Posts
문제 풀이 및 개발 공간
[백준] 2812번 크게 만들기 (gold 3 본문
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();
}
}
'백준공부 > java' 카테고리의 다른 글
[백준] 10610번 30 (silver 4 (0) | 2024.03.15 |
---|---|
[백준] 20955번 민서의 응급 수술 (gold 4 (2) | 2024.03.15 |
[백준] 1717번 집합의 표현 (gold 5 (0) | 2024.03.14 |
[백준] 2535번 아시아 정보올림피아드 (silver 5 (0) | 2024.03.13 |
[백준] 1976번 여행 가자 (gold 4 (0) | 2024.03.13 |