문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다.
먼저, 문자열 S는 아래와과 같은 규칙을 지킨다.
알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져 있다.
문자열의 시작과 끝은 공백이 아니다.
'<'와 '>'가 문자열에 있는 경우 번갈아가면서 등장하며, '<'이 먼저 등장한다. 또, 두 문자의 개수는 같다.
태그는 '<'로 시작해서 '>'로 끝나는 길이가 3 이상인 부분 문자열이고, '<'와 '>' 사이에는 알파벳 소문자와 공백만 있다. 단어는 알파벳 소문자와 숫자로 이루어진 부분 문자열이고, 연속하는 두 단어는 공백 하나로 구분한다. 태그는 단어가 아니며, 태그와 단어 사이에는 공백이 없다.
첫째 줄에 문자열 S가 주어진다. S의 길이는 100,000 이하이다.
첫째 줄에 문자열 S의 단어를 뒤집어서 출력한다.
사용 자료구조: 스택
- 문자를 하나씩 확인하면서 태그 안이면 그대로 출력, 태그 밖이면 뒤집어 출력한다
 - 배운것! -> bool변수를 사용해서 현재 태그안인지 밖인지 keep in track한다
 
#include <iostream>
#include <stack>
#include <string>
using namespace std;
// 스택에 있는 모든 문자를 출력해주는 함수 
void Print(stack<char>& s)
{
    while (!s.empty())
    {
        cout << s.top();
        s.pop();
    }
}
int main() {
    
    // 문자열 입력받기 
    string input;
    getline(cin, input);
    stack<char> s;
    
    // 해당 문자가 태그안인지 밖인지 확인해주는 변수 
    bool tag = false;
    
    // 문자를 하나씩 확인하면서 
    for (char ch : input)
    {
        if (ch == '<') 
        {
        	// 태그 안 
            tag = true;
            // 태그 앞에 오는 문자열 뒤집어 출력
            Print(s);
            cout << ch; // < 출력
        }
        
        else if (ch == '>')
        {
        	// 태그 끝
            tag = false;
            cout << ch; // > 출력
        }
        
        // 태그 안에 있는 문자면 
        else if (tag)
        {
            cout << ch; // 그대로 출력
        }
        
        else
        {
            if (ch == ' ') // 태그 밖인데 공백을 보면 뒤접어 출력
            {
                Print(s);
                cout << ch; // 공백 출력
            }
            else
                s.push(ch); // 단어 스택에 넣기 
        }
    }
    
    Print(s); // 스택에 남아있는 문자 모두 출력
    return 0;
}