1. 문제

2. 풀이
좌우 스택 2개를 만들어준 뒤 밀리는 문자들을 뒤로 보내고 StringBuilder에 넣을 때에는 스택은 거꾸로 pop되기 때문에 서브로 다 몰아준 뒤 다시 반대로 pop해준다.
3. 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Q5397_boj {
static StringBuilder result = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Stack<String> mainStack = new Stack<>();
Stack<String> subStack = new Stack<>();
int N = Integer.parseInt(br.readLine());
String str;
for (int k = 0; k < N; k++) {
str = br.readLine();
String[] password = str.split("");
for (String s : password) {
switch (s) {
case "<":
if (!mainStack.isEmpty()) subStack.push(mainStack.pop());
break;
case ">":
if (!subStack.isEmpty()) mainStack.push(subStack.pop());
break;
case "-":
if (!mainStack.isEmpty()) mainStack.pop();
break;
default:
mainStack.push(s);
}
}
while (!mainStack.isEmpty()) {
subStack.push(mainStack.pop());
}
while (!subStack.isEmpty()) {
result.append(subStack.pop());
}
result.append("\n");
}
System.out.println(result);
}
}
4. 결과

5. 소감
for문으로 stringbuilder에 먼저 넣고 reverse메서드를 이용했더니 시간 초과가 나서 while문으로 스택을 이용했더니 통과되었다. 기억하도록 하겠다.
'코딩테스트' 카테고리의 다른 글
| BOJ : 10799 (0) | 2024.04.05 |
|---|---|
| BOJ : 28278 (0) | 2024.04.05 |
| 프로그래머스 : 같은 숫자는 싫어 (0) | 2024.03.19 |
| SWEA 1219 : 길찾기 (0) | 2024.03.19 |
| SWEA 1218 : 괄호 짝짓기 (0) | 2024.03.11 |