문제 원본 : https://www.acmicpc.net/problem/1406
1406번: 에디터
첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수
www.acmicpc.net
import java.io.*;
import java.util.Stack;
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 str = br.readLine();
Stack<String> left = new Stack<>();
Stack<String> right = new Stack<>();
for (int i = 0; i < str.length(); ++i) {
left.push(str.substring(i, i + 1));
}
String cmd = "";
int n = Integer.parseInt(br.readLine());
for (int i = 0; i < n; ++i) {
cmd = br.readLine();
if (cmd.equals("L") && !left.empty()) {
right.push(left.pop());
} else if (cmd.equals("D") && !right.empty()) {
left.push(right.pop());
} else if (cmd.equals("B") && !left.empty()) {
left.pop();
} else if (cmd.startsWith("P")) {
String character = cmd.split(" ")[1];
left.push(character);
}
}
StringBuilder builder = new StringBuilder();
while(!left.empty()) {
builder.append(left.pop());
}
builder = builder.reverse();
while (!right.empty()) {
builder.append(right.pop());
}
bw.write(builder.toString());
bw.close();
br.close();
}
}
- 실버 3인데 정답 비율이 많이 낮길래(26.753%) 궁금해서 풀어 보았다.
- 처음엔 그냥 String 썼다가 바로 시간 초과가 떠서 StringBuilder로 바꿨더니 60%쯤에서 시간 초과가 났다.
- 애초에 접근법이 잘못됐었고, 스택으로 바꿔서 풀었다.
- 처음에 스택이란 키워드를 보고 이 문제를 어떻게 스택으로 풀지라고 생각했었는데...
- 어떤 분의 풀이를 보고 왼쪽 스택, 오른쪽 스택으로 나눠서 풀면 된다는 걸 깨닫고 유레카를 외쳤다!
'알고리즘 > BOJ' 카테고리의 다른 글
| [BOJ] 1600. 말이 되고픈 원숭이 (0) | 2022.02.27 |
|---|---|
| [BOJ] 2206. 벽 부수고 이동하기 (0) | 2022.02.27 |
| [BOJ] 5639. 이진 검색 트리 (0) | 2022.02.25 |
| [BOJ] 14003. 가장 긴 증가하는 부분 수열 5 (0) | 2022.02.24 |
| [BOJ] 11054. 가장 긴 바이토닉 부분 수열 (0) | 2022.02.23 |