https://www.acmicpc.net/problem/17413
Stack 사용
import java.io.*;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
static Stack<Character> stack = new Stack<>();
static Stack<Character> tagChecker = new Stack<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String input = br.readLine();
char[] inputArr = input.toCharArray();
for (int i = 0; i < inputArr.length; i++) {
//태그
if(isTag()){
//바로 쓰기
bw.write(inputArr[i]);
//'>'인 경우 pop해서 태그아님 상태 만들기 '>'은 위에서 이미 write함
if (inputArr[i] == '>' && isTag()) {
tagChecker.pop();
}
//아닐 때
} else if (!isTag()) {
//'<'만나면 tagChecker에 push하고, stack 다 뱉고, '<'쓰기
if (inputArr[i] == '<') {
tagChecker.push('<');
while (!stack.isEmpty()) {
bw.write(stack.pop());
}
bw.write('<');
continue;
}
//공백이면 stack 다 뱉고, 공백 쓰기
if (inputArr[i] == ' ') {
while (!stack.isEmpty()) {
bw.write(stack.pop());
}
bw.write(inputArr[i]);
}
//공백이 아니면 스택에 (뒤집어야하니까)넣기
if (inputArr[i] != ' ') {
stack.push(inputArr[i]);
}
}
}
while (!stack.isEmpty()) {
bw.write(stack.pop());
}
bw.flush();
bw.close();
}
public static boolean isTag() {
return !tagChecker.isEmpty(); //tagChecker에 값이 남았을 때 == '<,>' 안에 있을 때
}
}
*stack을 하나만 쓰고 flag를 쓰는게 더 나은지 모르겠다.
'알고리즘 > 백준' 카테고리의 다른 글
백준 17298번 - 오큰수 (Java 8) (0) | 2022.03.12 |
---|---|
백준 10799번 - 쇠막대 (Java 8) (0) | 2022.03.12 |
백준 1406번 - 에디터 (Java 8) (0) | 2022.03.11 |
백준 10866번 - 덱 (Java 8) (0) | 2022.03.11 |
백준 10845번 - 큐 (Java 8) (0) | 2022.03.10 |
댓글