[BOJ 1406] 에디터 (java)

1 minute read

:pencil2: 문제 링크 https://www.acmicpc.net/problem/1406 :pencil2:

문제 풀이

package basics_200;

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 BOJ1406 {

	public static void main(String[] args) throws NumberFormatException, IOException {

		//커서 기준 왼쪽 문자열
		Stack<Character> LeftStack = new Stack<Character>();
		//커서 기준 오른쪽 문자열
		Stack<Character> RightStack = new Stack<Character>();

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		// 편집기에 문자열 입력
		String word = br.readLine();
		for (char c : word.toCharArray()) {
			LeftStack.push(c);
		}

		// 테스트케이스
		Integer tc = Integer.parseInt(br.readLine());
		//명령 반복 
		while (tc > 0) {
			//명령 입력
			String s = br.readLine();
			char ch1 = s.charAt(0);
			switch (ch1) {
			case 'L':
				//커서를 왼쪽으로 옮김 -> 커서 오른쪽으로 왼쪽에 있던 문자 빼서 추가 
				if (!LeftStack.isEmpty()) {
					RightStack.push(LeftStack.pop());
				}
				break;
			case 'D':
				//커서를 오른쪽으로 옮김 -> 커서 왼쪽으로 오른쪽에 있던 문자 빼서 추가 
				if (!RightStack.isEmpty()) {
					LeftStack.push(RightStack.pop());
				}
				break;
			case 'B':
				//커서 왼쪽 문자 삭제 -> pop  
				if (!LeftStack.isEmpty()) {
					LeftStack.pop();
				}
				break;
			case 'P':
				//P 다음 입력한 문자를 커서 왼쪽에 추가 -> 커서 왼쪽 스택에 추가 
				char ch2 = s.charAt(2);
				LeftStack.push(ch2);
				break;

			}
			tc--;
		}
		//커서를 기준으로 나누어져있던 문자를 합침 
		while(!LeftStack.isEmpty()) {
			RightStack.push(LeftStack.pop());
		}
		//합쳐진 문자열을 출력 
		while(!RightStack.isEmpty()) {
			bw.write(RightStack.pop());
		}		
		bw.flush();
		bw.close();

	}

}

Comments