이 문제는
1 : ArrayList, System.out.print -> 시간초과
2 : LinkedList, sout -> 시간초과
3 : ArrayList, sout, Iterator -> 시간초과
4 : LinkedList, sout, Iterator -> 시간초과
5 : LinkedList, BufferedWriter, Interator -> 통과
결론적으로 LinkedList랑 bw랑 Iterator 모두 써야 통과다.
import java.io.*;
import java.util.LinkedList;
import java.util.ListIterator;
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 s = br.readLine();
int M = Integer.parseInt(br.readLine());
LinkedList<Character> A = new LinkedList<>();
for (int i = 0; i < s.length(); i++) {
A.add(s.charAt(i));
}
ListIterator<Character> list = A.listIterator();
while (list.hasNext()) {
list.next();
}
for (int i = 0; i < M; i++) {
String ss = br.readLine();
char c = ss.charAt(0);
switch (c) {
case 'L':
if (list.hasPrevious()) list.previous();
break;
case 'D':
if (list.hasNext()) list.next();
break;
case 'B':
//remove()는 next()나 previous()에 의해 반환된 가장 마지막 요소를 리스트에서 제거함
if (list.hasPrevious()) {
list.previous();
list.remove();
}
break;
case 'P':
list.add(ss.charAt(2));
break;
}
}
for (Character chr : A) {
bw.write(chr);
}
bw.flush();
bw.close();
}
}
스택을 쓰는 방법도 존재한다.
근데 중요한 게 bw 안 써주고 sout 쓰면 시간초과 난다.
bw 써주자
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 s = br.readLine();
int M = Integer.parseInt(br.readLine());
Stack<Character> left = new Stack<>();
Stack<Character> right = new Stack<>();
for (int i = 0; i < s.length(); i++) {
left.push(s.charAt(i));
}
for (int i = 0; i < M; i++) {
String ss = br.readLine();
char c = ss.charAt(0);
switch (c) {
case 'L':
if (!left.isEmpty()) right.push(left.pop());
break;
case 'D':
if (!right.isEmpty()) left.push(right.pop());
break;
case 'B':
if (!left.isEmpty()) left.pop();
break;
case 'P':
left.push(ss.charAt(2));
break;
}
}
while (!left.isEmpty()) {
right.add(left.pop());
}
while (!right.isEmpty()) {
System.out.print(right.pop());
}
}
}