https://www.acmicpc.net/problem/1406
Stack 활용
import java.io.*;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
static Stack<Character> stackLeft;
static Stack<Character> stackRight;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
stackLeft = new Stack<Character>();
stackRight = new Stack<Character>();
for (Character x : input.toCharArray()) {
stackLeft.push(x);
}
int numOfCommand = Integer.parseInt(br.readLine());
while (numOfCommand-- > 0) {
StringTokenizer st = new StringTokenizer(br.readLine());
switch (st.nextToken()) {
case "L":
L();
break;
case "D":
D();
break;
case "B":
B();
break;
case "P":
P(st.nextToken());
break;
}
}
StringBuilder sb = new StringBuilder();
while(stackLeft.size() > 0){
stackRight.push(stackLeft.pop());
}
while (stackRight.size() >0){
sb.append(stackRight.pop());
}
System.out.println(sb);
}
public static void L() {
if(!stackLeft.isEmpty()){
stackRight.push(stackLeft.pop());
}
}
public static void D() {
if(!stackRight.isEmpty()){
stackLeft.push(stackRight.pop());
}
}
public static void B() {
if(!stackLeft.isEmpty()){
stackLeft.pop();
}
}
public static void P(String charSequence) {
stackLeft.push(charSequence.charAt(0));
}
}
LinkedList로 풀었는데, 안돼서 stack 두개가 나란히 있다고 생각하고 풀었다. 스스로 생각해낸게 장하긴 했다. stack이 LIFO이라 오른쪽에 몰아넣고 pop해야 한다고 생각했는데, 향상된 for문으로 그냥 출력이 되어버린다.
속도도 더 빠르던데, 이유는 모른다.
또 ,풀고나서 권민하님 블로그를 봤는데, listIterator를 사용한 방법도 있었다. 시간복잡도에 대한 고민이 필요함을 절실히 느꼈다.
*자료구조, 시간복잡도 공부 필요
'알고리즘 > 백준' 카테고리의 다른 글
백준 10799번 - 쇠막대 (Java 8) (0) | 2022.03.12 |
---|---|
백준 17413번 - 단어 뒤집기 2(Java 8) (0) | 2022.03.11 |
백준 10866번 - 덱 (Java 8) (0) | 2022.03.11 |
백준 10845번 - 큐 (Java 8) (0) | 2022.03.10 |
백준 1158번 - 요세푸스 (Java 8) (0) | 2022.03.10 |
댓글