Stack<Character> left = newStack<>(); Stack<Character> right = newStack<>();
for (inti=0; i < str.length(); i++) { left.push(str.charAt(i)); }
intnumOfCmd= sc.nextInt();
for (inti=0; i < numOfCmd; i++) { Stringcmd= sc.next();
if (cmd.equals("L")) { if (!left.isEmpty()) { right.push(left.peek()); left.pop(); } } elseif (cmd.equals("D")) { if (!right.isEmpty()) { left.push(right.peek()); right.pop(); } } elseif (cmd.equals("B")) { if (!left.isEmpty()) { left.pop(); } } elseif (cmd.equals("P")) { charvalue= sc.next().charAt(0); left.push(value); } }
while (!left.isEmpty()) { right.push(left.peek()); left.pop(); }
StringBuilderstringBuilder=newStringBuilder(); while (!right.isEmpty()) { stringBuilder.append(right.peek()); right.pop(); }
System.out.println(stringBuilder.toString()); } }
LinkedList와 ListIterator를 이용한 문제 풀이
해당 문제는 LinkedList를 이용해서도 문제를 해결할 수 있다. LinkedList의 원소에 List로 접근을 하게 되면 O(n) 의 시간이 걸려 시간 초과가 뜨게 된다. 때문에 다행이 문제는 Cursor위치를 한칸씩 밖에 못 움직이므로 ListIterator 라는 객체를 이용해 LinkedList를 관리하도록 한다.