문자열을 거꾸로 출력하는 것은 스택을 사용하면 된다.
그리고 태그 안과 밖을 구분하는 것은 안에 있으면 true 밖이면 false로 구별하면 된다.
import java.util.Scanner;
import java.util.Stack;
public class Num17413 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String S = sc.nextLine();
Stack<Character> stk = new Stack<>();
//<> 안에 있는지, 밖에 있는지 구분
//<> 안이면 true, 밖이면 false
boolean inout = false;
// S를 하나씩 탐색
for (int i = 0; i<S.length(); i++) {
//'<'이 오면
if(S.charAt(i) == '<') {
inout = true;
while (!stk.isEmpty()) {
System.out.print(stk.pop());
}
//앞에 '<' 기호 표시
System.out.print(S.charAt(i));
}
//'>'이 오면
else if(inout) {
System.out.print(S.charAt(i));
}
//<> 안에 있으면
else if(!inout) {
// 공백이라면
if(S.charAt(i)==' ') {
//스택에 저장되어 있는 것을 다 pop하면서 출력
while (!stk.isEmpty()) {
System.out.print(stk.pop());
}
//공백 출력
System.out.print(S.charAt(i));
}
//공백이 아니면
else {
//스택에 넣기
stk.push(S.charAt(i));
}
}
}
// 나머지 스택에 저장되어 있는 것을 다 pop하면서 출력
while (!stk.isEmpty()) {
System.out.print(stk.pop());
}
}
}
참고 : https://yongku.tistory.com/entry/%EB%B0%B1%EC%A4%80-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%B0%B1%EC%A4%80-17413%EB%B2%88-%EB%8B%A8%EC%96%B4-%EB%92%A4%EC%A7%91%EA%B8%B0-2-%EC%9E%90%EB%B0%94Java
출처 : https://www.acmicpc.net/problem/17413