백준 알고리즘
10. 1406번 에디터
Romenest
2021. 9. 13. 09:58
커서의 위치에 초점을 두기보다
커서의 기준을 두고 좌우로 나뉜다라는것에 초점을 두게 된다면 쉽게 풀릴 문제였던것 같다
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;
public class training {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
Stack<String> Lstack = new Stack<String>();
Stack<String> Rstack = new Stack<String>();
String string = br.readLine();
//첫 스택에 집어넣을 문자열들
int a = Integer.parseInt(br.readLine());
//첫 명령의 수
String[] arr = string.split("");
//구분자를 ""로 했을경우 문자 하나하나로 구분한다
for(int i=0; i<arr.length; i++) {
Lstack.push(arr[i]);
//예를들어서 abcd를 넣을경우 a,b,c,d로 구분하여 순서대로 좌측스택에 쌓는다
}
//각명령에따라 스택을 쌓고 빼고 하는 과정
while(a>0){
String[] b = br.readLine().split(" ");
//공백을 기준으로 문자를 나눈다
switch (b[0]) {
case "L":
if(!Lstack.isEmpty()){
Rstack.push(Lstack.pop());
}
break;
case "D":
if(!Rstack.isEmpty()){
Lstack.push(Rstack.pop());
}
break;
case "B":
if(!Lstack.isEmpty()) {
Lstack.pop();
}
break;
case "P":
Lstack.push(b[1]);
break;
}
a--;
}
while(!Lstack.isEmpty()){
Rstack.push(Lstack.pop());
}
while(!Rstack.isEmpty()){
bw.write(Rstack.pop());
}
bw.flush();
bw.close();
}
}
결과