728x90
300x250
https://www.acmicpc.net/problem/5397
Stack 2개를 이용해서 푸는 문제
String 으로 답을 연산하려다가 시간초과 발생..
왼쪽 stack을 deque로 바꾸어 스택처럼 사용하다가 최종 출력때만 queue로 사용한다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Deque;
import java.util.LinkedList;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//System.setIn(new FileInputStream("Test.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for (int tc = 0; tc < T; tc++) {
String log = br.readLine();
//커서를 기준으로 입력값 나눔
Deque<Character> Lstk = new LinkedList<Character>();
Stack<Character> Rstk = new Stack<Character>();
for (int i = 0; i < log.length(); i++) {
char ch = log.charAt(i);
if(ch=='<') {
if(!Lstk.isEmpty()) {
Rstk.add(Lstk.pollLast()); //왼쪽 --> 오른쪽으로 옮기기
}
} else if(ch=='>') {
if(!Rstk.isEmpty()) {
Lstk.addLast(Rstk.pop()); //왼쪽 --> 오른쪽으로 옮기기
}
} else if(ch=='-'){
if(!Lstk.isEmpty()) {
Lstk.pollLast();
}
} else {
Lstk.addLast(ch);
}
}
// System.out.println(Lstk);
String res = "";
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
while(!Lstk.isEmpty()) {
// res = Lstk.pop()+res;
bw.write(Lstk.pop());
}
while(!Rstk.isEmpty()) {
// res += Rstk.pop();
bw.write(Rstk.pop());
}
// System.out.println(res);
bw.append("\n");
bw.flush();
}
}
}
728x90
'알고리즘 > 스택' 카테고리의 다른 글
스택을 이용한 중위 표기법, 후위 표기법 변환 및 계산 (0) | 2023.12.19 |
---|---|
백준 1874번: 스택 수열 [스택][Stack] -Java (0) | 2023.12.11 |
백준 10799번: 쇠막대기 [스택][Stack][누적합] -Java (1) | 2023.12.06 |
백준 4949번: 균형잡힌 세상[Stack][스택] -Java, 반례 (1) | 2023.12.05 |
백준 2841번: 외계인의 기타 연주 (0) | 2020.03.06 |