본문 바로가기
코딩 테스트

백준 1406번 에디터(자바,java,JAVA)

by 주용사 2023. 1. 11.
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