๋ฌธ์
ํด๋น ํฌ์คํ ์ ๋ฐฑ์ค์ 1406๋ฒ ์๋ํฐ ์ ์ ๊ทผ๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ค๋ช ํ ๊ธ ์ ๋๋ค.
์ ๋ต ์์ค ์ฝ๋๋ฅผ ํ์ธํ์๋ ค๋ฉด solve url ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค.
๋ฌธ์
์์ ์ ๋ ฅ & ์ถ๋ ฅ
ํด๊ฒฐ๋ฒ
์ด ๋ฌธ์ ๋ ์ฌ์ค ์ฌ๋ฌ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ์ด๋ค.
Cursor์ด๋ผ๋ ๊ฐ๋
์ LinkedList์์ ์ ํฉํด ๋ณด์ด์ง๋ง LinkedList๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํด์ ํ๋ฉด ์๊ฐ ์ด๊ณผ๊ฐ ๋์ค๊ฒ ๋๋ค.
๊ทธ๋์ ๋ค๋ฅธ ์ ๊ทผ์ ํตํด ํ์ด์ผ ํ๋๋ฐ, ๊ทธ ๋ค๋ฅธ ์ ๊ทผ์ด ๋ฐ๋ก ์คํ์ด๋ค.
์ ๊ทผ๋ฒ
ํธ์ง๊ธฐ๊ฐ ์ง์ํ๋ ๋ช ๋ น์ด๋ ์ด 4๊ฐ์ง ์ด๋ค.
์ฐ๋ฆฌ๋ ์ปค์๋ฅผ ๊ธฐ์ค์ผ๋ก Stack 2๊ฐ๋ก ํด๋น ๋ฌธ์ ๋ฅผ ํ์ด๊ฐ ์ ์๋ค.
์ฒซ ๋ฒ์งธ ์คํ์๋ ์ ๋ ฅํ ๋ฌธ์์ด๋ค์ด ๋ชจ๋ ๋ค์ด๊ฐ ์ฑ๋ก ์์ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฐ์ ์ด๋ ๋ช
๋ น์ด๋ฅผ ๋ง๋ ๋ ๋ง๋ค ์ปค์ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ์๋ฅผ ์๋ก ๋ค๋ฅธ ์คํ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
L
: ์ปค์๋ฅผ ์ผ์ชฝ์ผ๋ก ํ ์นธ ์ฎ๊ธฐ๋ ๊ณผ์ ์ ์ผ์ชฝ์ ์๋ ์คํ์์ ์ ํ๋๋ฅผ ๋นผ์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ฎ๊ธฐ๋ฉด ๋๋ค.D
: ์ด๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ค๋ฅธ์ชฝ ์คํ์์ ์ผ์ชฝ ์คํ์ผ๋ก ์ฎ๊ธฐ๋ฉด ๋๋ค.B
: ์ปค์ ์ผ์ชฝ์ ๋ฌธ์์ด๋ฏ๋ก ์ผ์ชฝ ์คํ์ top์ popํ๋ค.P $
: ์ปค์ ์ผ์ชฝ์ ์ถ๊ฐํ๋ฏ๋ก ์ผ์ชฝ ์คํ์ push ํ๋ฉด ๋๋ค.
์ค๋ต ํ๋ณด
์ค๋ต ํ๋ณด์๋ ์คํ์ด ๋น์ด์์ ๋ pop์ ํ ์ ์์ผ๋ฏ๋ก L๊ณผ D ์ฐ์ฐ์ ํ ๋ isEmpty()
๋ก ๊ฒ์ฌ๋ฅผ ํด์ค์ผ ํ๋ค.
์ ๋ต ์ฝ๋
์ด๋ฒ์๋ ์คํ์ ์ง์ ๊ตฌํํด์ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด๋ ค ํ๋ค.
์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ๊ตฌํํ ์คํ์ด๋ค.
import java.io.*;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String words = br.readLine();
Stack stack = new Stack();
char[] word = words.toCharArray();
for(char ch : word) {
stack.push(ch);
}
Stack tempStack = new Stack();
int n = Integer.parseInt(br.readLine());
while(n-- > 0) {
String cmd = br.readLine();
if(cmd.charAt(0) == 'P') {
cmdP(stack, cmd.charAt(2));
}else {
if(cmd.charAt(0) == 'L') {
cmdL(stack, tempStack);
}else if(cmd.charAt(0) == 'D') {
cmdD(stack, tempStack);
}else if(cmd.charAt(0) == 'B') {
cmdB(stack);
}
}
}
while(!stack.isEmpty()) {
tempStack.push(stack.pop());
}
while(!tempStack.isEmpty()) {
bw.write(tempStack.pop());
}
bw.flush();
bw.close();
}
private static void cmdL(Stack stack, Stack tempStack) {
if(!stack.isEmpty()) {
tempStack.push(stack.pop());
}
}
private static void cmdD(Stack stack, Stack tempStack) {
if(!tempStack.isEmpty()) {
stack.push(tempStack.pop());
}
}
private static void cmdB(Stack stack) {
if(!stack.isEmpty()) {
stack.pop();
}
}
private static void cmdP(Stack stack, char ch) {
stack.push(ch);
}
}
class Node {
private char data;
private Node link;
Node(Node link, char data) {
this.data = data;
this.link = link;
}
char getData() {
return data;
}
Node getLink() {
return link;
}
}
class Stack {
Node top;
Stack () {
top = null;
}
boolean isEmpty() {
return top == null;
}
void push(char data) {
top = new Node(top, data);
}
char pop() {
char ret = top.getData();
top = top.getLink();
return ret;
}
}
๋๊ธ