문제 원본 : https://www.acmicpc.net/problem/5430
5430번: AC
각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.
www.acmicpc.net
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));
int t = Integer.parseInt(br.readLine());
for (int i = 0; i < t; ++i) {
StringBuilder builder = new StringBuilder();
char[] chars = br.readLine().toCharArray();
int n = Integer.parseInt(br.readLine());
String s = br.readLine();
Deque<String> deque = new ArrayDeque<>();
if (n == 1) {
deque.add(s.substring(1, s.length() - 1));
} else if (n > 1) {
String[] elem = s.substring(1, s.length() - 1).split(",");
for (int j = 0; j < elem.length; ++j) {
deque.addLast(elem[j]);
}
}
boolean isError = false;
boolean isReverse = false;
for (int j = 0; j < chars.length; ++j) {
if (chars[j] == 'R') {
isReverse = !isReverse;
} else {
if (deque.isEmpty()) {
isError = true;
break;
}
if (isReverse) {
deque.removeLast();
} else {
deque.removeFirst();
}
}
}
if (isError) {
builder.append("error\n");
} else {
builder.append("[");
if (isReverse) {
while (!deque.isEmpty()) {
builder.append(deque.getLast()).append(",");
deque.removeLast();
}
} else {
while (!deque.isEmpty()) {
builder.append(deque.getFirst()).append(",");
deque.removeFirst();
}
}
if (builder.length() > 2) {
builder.deleteCharAt(builder.length() - 1);
}
builder.append("]\n");
}
bw.write(builder.toString());
}
bw.close();
br.close();
}
}
- 단순 구현 문제인데 골드 5에 낮은 정답률(19.998%)이 의아해서 풀어 보았다.
- R인 경우는 뒤집고, D인 경우는 맨 앞 원소를 삭제해야 하는데,
- ArrayList로 원소를 담고 reverse를 해버리면 시간 초과가 난다.
- 삭제도 마찬가지로 ArrayList.remove는 시간 복잡도가 O(n)이기 때문에 사용하면 안 된다.
- Deque를 사용해서 R인 경우에 boolean 값으로 상태만 바꿔주고,
- 상태에 따라 맨 앞 원소나 맨 뒤 원소를 삭제하면 시간 초과를 피할 수 있다.
'알고리즘 > BOJ' 카테고리의 다른 글
| [BOJ] 1005. ACM Craft (0) | 2022.03.05 |
|---|---|
| [BOJ] 2252. 줄 세우기 (0) | 2022.03.05 |
| [BOJ] 3190. 뱀 (0) | 2022.03.01 |
| [BOJ] 1074. Z (0) | 2022.02.28 |
| [BOJ] 1600. 말이 되고픈 원숭이 (0) | 2022.02.27 |