[풀이]
- 자료구조를 사용하는 구현 문제입니다.
- 저는 단순히 스택만 사용했지만, 힌트를 보니 연결 리스트를 이용할 수 있다고 되어있습니다.
- 검색해보니 대부분의 블로그는 스택을 이용했습니다.(아무래도 스택을 이용하는게 가장 간단하다고 생각합니다.)
- 스택을 두개 사용하여 '<'와 '>'를 기준으로 나눠서 사용했습니다.
- '<'이 입력되었을 경우, post 스택에 쌓도록 하였습니다.
- '>'이 입력되었을 경우에는 pre 스택에 post에 쌓인 값을 빼서 추가하도록 했습니다.
- 이러한 조건문을 switch문을 통해 구현했습니다.
- '<' , '>' , '-' 이외의 값이 입력되는 것은 default를 이용해 구현되도록 했습니다.
- 최종적으로 StringBuffer의 append() 메소드를 통해 sb 변수에 비밀번호를 담아 출력하도록 했습니다.
[코드]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int testCase = Integer.parseInt(br.readLine());
while (testCase-- > 0) {
StringBuffer sb = new StringBuffer();
Stack<Character> pre = new Stack<>();
Stack<Character> post = new Stack<>();
char[] chars = br
.readLine()
.toCharArray();
for (Character character : chars) {
switch (character) {
case '<':
if (!pre.isEmpty()) {
post.push(pre.pop());
}
break;
case '>':
if (!post.isEmpty()) {
pre.push(post.pop());
}
break;
case '-':
if (!pre.isEmpty()) {
pre.pop();
}
break;
default:
pre.push(character);
break;
}
}
while (!post.isEmpty()) {
pre.push(post.pop());
}
for (int i = 0; i < pre.size(); i++) {
sb.append(pre.elementAt(i));
}
System.out.println(sb);
}
}
}
'Algorithm > 백준' 카테고리의 다른 글
백준 7576번 : 토마토(Java) (0) | 2021.11.13 |
---|---|
백준 1012번 : 유기농 배추(Java) (0) | 2021.11.12 |
백준 7562번 : 나이트의 이동(Java) (0) | 2021.11.08 |
백준 18870번 : 좌표 압축(Java) (0) | 2021.11.07 |
백준 1406번 : 에디터(Java) (0) | 2021.10.30 |