백준/코드 플러스 (알고리즘 기초 - 1)

[백준] 201 - 자료구조 1 (연습) : 단어 뒤집기 2 (!) (17413번 JAVA)

MoveForward 2023. 1. 5. 16:29


 


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;



public class Main{
    
    public static void main(String[] args) throws IOException{

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();
        Stack<Character> stack = new Stack<>();

        String S = br.readLine();

        boolean flag = false; // 태그 안 : true , 태그 밖 : false

        for(int i=0; i<S.length(); i++){
            
            // '<'을 만남
            if(S.charAt(i) == '<'){
                flag = true; // '태그 안'임을 알림.

                // 스택 모두 pop
                while(!stack.isEmpty()){
                    sb.append(stack.pop());
                }
                sb.append(S.charAt(i)); // '<' 출력
            }
            // '>'을 만남
            else if(S.charAt(i) == '>'){
                flag = false; // '태그 밖'임을 알림
                sb.append('>'); // '>' 출력
            }

            // 태그 안
            else if(flag == true){
                sb.append(S.charAt(i));
            }

            // 태그 밖
            else if(flag == false){
                // 태그 밖에서 공백을 만난 경우
                if(S.charAt(i) == ' '){
                        // 스택 모두 pop
                    while(!stack.isEmpty()){
                        sb.append(stack.pop());
                    }
                    sb.append(S.charAt(i)); // ' ' 출력
                }
                else{
                    stack.push(S.charAt(i));
                }
            }
        }

        // 스택 모두 pop
        while(!stack.isEmpty()){
            sb.append(stack.pop());
        }


        bw.write(sb.toString());
        bw.flush();
        bw.close();
    }
}