[BOJ 1406] 에디터 (java)
문제 링크 https://www.acmicpc.net/problem/1406
문제 풀이
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