이번 문제는 간단하므로, 주석으로 설명을 대체하겠다.
import java.io.*;
import java.util.Stack;
import java.util.function.BiPredicate;
public class S17413 {
static Stack<Character> stack = new Stack<>();
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BiPredicate<Character,Character> p = (ch1, ch2) -> ch1 == ch2;
String input = br.readLine();
boolean isTag = false;
for(char ch : input.toCharArray()) {
if(p.test(ch,'<')) { // 처음으로 태그가 오거나,
popping(); // 이와 같이 부분 문자열 다음에 태그인 경우
sb.append(ch);
isTag = true;
}
else if(p.test(ch, '>')){ // 태그의 마침이 됐다면
sb.append(ch);
isTag = false; // 태그가 아니므로 false
}
else if(isTag) // tag 가 true인 동안 sb에 저장
sb.append(ch);
else { // 태그가 아닌 경우
if(p.test(ch, ' ')) { // 공백이라면, 스택으로 뒤집기
popping();
sb.append(" ");
}
else // 태그도 아니고, 공백도 아닌 경우 push
stack.push(ch);
}
}
popping(); // 마지막 부분 문자열이 남았을 때 처리
sb.append(" ");
System.out.println(sb);
}
public static void popping() {
while(!stack.empty())
sb.append(stack.pop());
}
}
'알고리즘 분류 > 스택 알고리즘' 카테고리의 다른 글
17298 오큰수 JAVA (0) | 2023.04.12 |
---|---|
10799 쇠막대기 JAVA (0) | 2023.04.10 |
에디터 1406 JAVA (0) | 2023.04.09 |
스택 수열 1874 JAVA (0) | 2023.04.08 |
4949 균형잡힌 세상 JAVA (0) | 2023.04.06 |