https://www.acmicpc.net/problem/1406
1. 아이디어
현재 커서의 앞에 있는 문자들과 뒤에 있는 문자들을 각각 담는 Deque, Stack 자료구조를 활용하면 간단하게 해결할 수 있다.
2. 문제풀이
현재 커서의 바로 앞 문자가 peek로 오는 Deque와 현재 커서 바로 뒤 문자가 peek로 오는 두 개의 Stack으로 명령들을 처리하면 됐다. 명령 수행 후 커서를 맨 앞으로 옮긴 후 모든 문자를 출력하는 방식으로 구현했다.
3. 코드
import java.io.*;
import java.util.*;
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));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
Deque<Character> deque = new ArrayDeque<>();
Deque<Character> stack = new ArrayDeque<>();
char[] input = br.readLine().toCharArray();
for (char c : input) {
deque.addLast(c);
}
int M = Integer.parseInt(br.readLine());
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
char order = st.nextToken().charAt(0);
if (order == 'L') {
if (!deque.isEmpty()) {
stack.push(deque.removeLast());
}
} else if (order == 'D') {
if (!stack.isEmpty()) {
deque.addLast(stack.pop());
}
} else if (order == 'B') {
if (!deque.isEmpty()) {
deque.removeLast();
}
} else {
char c = st.nextToken().charAt(0);
deque.addLast(c);
}
}
while (!deque.isEmpty()) {
sb.append(deque.removeFirst());
}
while (!stack.isEmpty()) {
sb.append(stack.pop());
}
bw.write(sb.toString());
bw.flush();
}
}
4. 후기
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준] 14503번 - 로봇 청소기 [Java] (0) | 2025.02.11 |
---|---|
[백준] 5397번 - 키로거 [Java] (0) | 2025.02.11 |
[백준] 1655번 - 가운데를 말해요 [Java] (0) | 2025.02.11 |
[백준] 1781번 - 컵라면 [Java] (0) | 2025.02.11 |
[백준] 1202번 - 보석 도둑 [Java] (0) | 2025.02.11 |