import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Flip_Word_2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
StringBuilder sb = new StringBuilder();
boolean bracket = false;
Stack<String> stack = new Stack<>();
for(int i =0; i<str.length(); i++){
if(str.charAt(i)=='<'){
while(!stack.isEmpty()) {
sb.append(stack.pop());
}
bracket = true;
}
else if(str.charAt(i)=='>'){
bracket = false;
sb.append(">");
continue;
}
if(!bracket){
if(str.charAt(i)==' '){
while(!stack.isEmpty()) {
sb.append(stack.pop());
}
sb.append(' ');
}
else{
stack.add(String.valueOf(str.charAt(i)));
}
if(i == str.length()-1){
while(!stack.isEmpty()) {
sb.append(stack.pop());
}
}
}
else{
sb.append(str.charAt(i));
}
}
System.out.print(sb);
}
}
풀이방법
- 문자열을 for문을 통해 한글자씩 탐색한다.
- 현재 <> 안에 문자인지를 판별하기위해 안에 있다면 bracket=true를 통해 구별한다.
- <> 밖에 문자라면 다 뒤집어야 하므로, FILO의 형태로 데이터가 입출력되는 stack을 사용한다.
- stack에는 <>밖에서 공백을 만날때까지 넣거나, '<'를 만날때까지 넣거나, 문자열에 맨마지막을 만날때까지 넣는다.
- <>안은 그냥 그대로 출력한다.