공부하는 히욤이

[BOJ] 1406. 에디터 본문

Algorithm/BaekJoon

[BOJ] 1406. 에디터

히욤이 2020. 2. 7. 20:46

BaekJoon 1406. 에디터

* 문제의 저작권은 BOJ 및 문제를 만든 사람에게 있습니다.

 

 

 

 

 

[문제 접근]

처음에는 Stack을 쓰지 않고 ArrayList를 사용해서 커서 값을 저장하는 변수를 이용해서 풀었다.

이렇게 풀었더니 시간 초과가 나서 찾아보니 Stack을 사용해서 풀어야 한다고 했다.

 

Stack 2개를 사용해서 글자가 왼쪽에 있는 경우 lstack에

오른쪽으로 옮길 경우 rstakc에 추가하는 방법으로 해서 풀어줬더니 시간초과가 해결 됐다.

 

 

 

 

 

 

 

 

 

 

[코드]

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Stack;
import java.util.StringTokenizer;

public class Main_1406 {
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String s = br.readLine();
		Stack<Character> lstack = new Stack<>();
		Stack<Character> rstack = new Stack<>();
		
		for (int i = 0; i < s.length(); i++) {
			lstack.push(s.charAt(i));
		}
		
		int n = Integer.parseInt(br.readLine());
		
		for (int i = 0; i < n; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			String key = st.nextToken();
			
			switch (key) {
			case "P":
				String ch = st.nextToken();
				lstack.push(ch.charAt(0));
				break;

			case "D":
				if (!rstack.isEmpty()) {
					lstack.push(rstack.pop());
				}
				break;
				
			case "B":
				if (!lstack.isEmpty()) {
					lstack.pop();
				}
				break;
				
			case "L":
				if (!lstack.isEmpty()) {
					rstack.push(lstack.pop());
				}
				break;
			}
		}
		
		
		while (!lstack.isEmpty()) {
			rstack.push(lstack.pop());
		}
		
		while (!rstack.isEmpty()) {
			System.out.print(rstack.pop());
		}
		
		
	}
}

'Algorithm > BaekJoon' 카테고리의 다른 글

[BOJ] 1158. 요세푸스 문제  (0) 2020.02.08
[BOJ] 10845. 큐  (0) 2020.02.07
[BOJ] 1874. 스택 수열  (2) 2020.02.07
[BOJ] 9093. 단어 뒤집기  (0) 2020.02.06
[BOJ] 2455. 지능형 기차  (0) 2019.12.15