백준 알고리즘

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();
		
	}
}

 

결과