반응형
- 알고리즘 분류 : 문자열
- 사용 언어 : JAVA
- 문제 요점
- 스택을 이용해서 커서 기준 좌우를 설정하면 된다.
- A스택은 커서 왼쪽의 알파벳을 넣고, B스택은 커서 오른쪽의 알파벳을 넣는 방식
소스 설명은 주석을 참고해주세요.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
// Link : https://www.acmicpc.net/problem/5397
public class Main {
public static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
for(int i=0; i<N; i++) {
String str = br.readLine();
Decode(str); // 문자열 해석
}
System.out.println(sb.toString());
}
// 문자열 해석
public static void Decode(String str) {
char[] charArr = str.toCharArray();
// Stack을 이용해서 풀이.
Stack<Character> left = new Stack<Character>(); // 커서 기준 왼쪽 문자들
Stack<Character> right = new Stack<Character>(); // 커서 기준 오른쪽 문자들
for(char ch : charArr) {
switch(ch) {
// 왼쪽 문자 하나를 오른쪽 문자로 옮김.
case '<':
if(!left.isEmpty())
right.push(left.pop());
break;
// 오른쪽 문자 하나를 왼쪽 문자로 옮김
case '>':
if(!right.isEmpty())
left.push(right.pop());
break;
// 커서 왼쪽 문자 하나 삭제
case '-':
if(!left.isEmpty())
left.pop();
break;
// 커서 왼쪽 문자에 문자 추가
default:
left.push(ch);
break;
}
}
StringBuilder ss = new StringBuilder();
// 커서 기준 오른쪽 문자를 왼쪽 문자에 넣어줌
while(!right.isEmpty()) {
left.push(right.pop());
}
// stack은 FILO이므로 pop이 아닌 elementAt을 이용해서 앞에서부터 차례대로 확인
for(int i=0; i<left.size(); i++) {
ss.append(left.elementAt(i));
}
sb.append(ss.toString()+"\n");
}
}
반응형
'Algorithm' 카테고리의 다른 글
[Programmers] 성격 유형 검사하기 (JAVA) (0) | 2022.10.01 |
---|---|
[BAEKJOON] 1325번 : 효율적인 해킹 (JAVA) (1) | 2022.09.25 |
[BAEKJOON] 1541번 : 잃어버린 괄호 (JAVA) (1) | 2022.09.21 |
[BAEKJOON] 2583번 : 영역 구하기 (JAVA) (0) | 2022.09.18 |
[BAEKJOON] 1181번 : 단어정렬 (JAVA) (0) | 2022.09.17 |