[백준] 5430. AC
문제 링크
풀이 과정
Reverse(R) 와 Delete(D) 명령을 자유롭게 하기 위해 Deque을 생각했습니다.
R 명령이 있을 때마다 boolean 값으로 체크를 해두어, D 명령을 만났을 때 removeFirst
를 할 지, removeLast
를 할 지 판단했습니다.
또한, 답으로 출력할 배열을 만들기 위해 Iterator 객체를 사용했으며, 역방향의 순회를 위하여 Deque 클래스의 descendingIterator
메소드를 사용했습니다.
코드
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int TC = sc.nextInt();
for (int tc = 1; tc <= TC; tc++) {
String ans = "";
String p = sc.next();
int n = sc.nextInt();
String arr = sc.next();
Deque<Integer> deque = new ArrayDeque<>();
if (!arr.equals("[]")) {
arr = arr.substring(1, arr.length() - 1);
String[] splitArr = arr.split(",");
if (splitArr.length != 0) {
for (String s : splitArr) {
deque.addLast(Integer.parseInt(s));
}
}
}
boolean front = true;
boolean wrong = false;
int idx = 0;
while (idx < p.length()) {
if (p.charAt(idx) == 'R') {
front = !front;
} else if (p.charAt(idx) == 'D') {
if (deque.isEmpty()) {
wrong = true;
break;
} else {
if (front) {
deque.removeFirst();
} else {
deque.removeLast();
}
}
}
idx++;
}
if (!deque.isEmpty()) {
StringBuilder sb = new StringBuilder("[");
Iterator<Integer> iter = front ? deque.iterator() : deque.descendingIterator();
while (iter.hasNext()) {
sb.append(iter.next() + ",");
}
ans = sb.substring(0, sb.length() - 1) + "]";
} else {
ans = "[]";
}
if (wrong)
ans = "error";
System.out.println(ans);
}
}
}
댓글남기기