728x90
주석으로 달아놨지만 명령어 행위들이 왼쪽스택 오른쪽스택으로 주고받게 끔 되어있다.
그림을 그려보면 확실히 알 수 있다.
import java.io.*;
import java.util.*;
public class Main {
public static int ncount = 0;
/* output setting */
// static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
/* input reader */
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//ArrayList<Integer> list = new ArrayList<>();
Stack<Character> stack = new Stack<>();
Stack<Character> stack2 = new Stack<>();
String sent = br.readLine();
char[] array = sent.toCharArray();
int cursor = array.length;
/* input tokenizer */
StringTokenizer st = new StringTokenizer(br.readLine());
//st = new StringTokenizer(br.readLine());
/* stack2에 담아두고 시작한다 */
for(int ii = 0 ; ii < array.length ; ii++)
{
stack2.push(array[ii]);
}
/* parsing start */
int n = Integer.parseInt(st.nextToken());
/* stack2는 오른쪽에 있다고 생각하고 stack은 왼쪽에 있다고 생각한다 */
/* P는 stack2에 push가 된다 */
/* L은 stack2 -> stack으로 간다 */
/* D는 stack -> stack2로 간다 */
/* B는 stack2의 top을 하나 pop한다 */
for(int ii = 0 ; ii < n ; ii++)
{
st = new StringTokenizer(br.readLine());
char word;
String temp = st.nextToken();
if(("P").equals(temp))
{
word = (st.nextToken()).charAt(0);
stack2.push(word);
}
else if(("L").equals(temp))
{
if(stack2.isEmpty() == false) // 이런 것들 없으면 exception발생
stack.push(stack2.pop());
}
else if(("D").equals(temp))
{
if(stack.isEmpty() == false)
stack2.push(stack.pop());
}
else if(("B").equals(temp))
{
if(stack2.isEmpty() == false)
stack2.pop();
}
}
int size2 = stack2.size();
for(int ii = 0 ; ii < size2 ; ii++)
{
stack.push(stack2.pop());
}
int size = stack.size();
for(int ii = 0 ; ii < size ; ii++)
{
System.out.print(stack.pop());
}
br.close();
}
}
728x90
'코딩 테스트' 카테고리의 다른 글
백준 1260번 DFS와 BFS(자바,java,JAVA) (0) | 2023.01.11 |
---|---|
백준 18429번 근손실(자바,java,JAVA) (0) | 2023.01.11 |
2577번 숫자의 개수(자바, java) - 백준 문제풀이 (0) | 2023.01.11 |
1475번 방번호(자바, java) - 백준 문제풀이 (0) | 2023.01.11 |
5397번 키로거(자바, java) - 백준 문제풀이 (0) | 2023.01.11 |