공백과 태그를 분리해서 생각해야한다.
스택에 값을 집어넣으면 반대로 나오므로 공백전까지 스택에 집어넣다가
만나면 스택에 있는 값들을 출력하는 형태이다.
'<' 를 만날 경우 뒤집으면 안 되니 스택에 넣지 않고 바로 바로 출력한다.
'<' 를 만났을 때 이미 스택에 넣어진 값들이 있을 수 있으므로 스택에 넣은 값을 출력하는 것이 우선이다.
'>' 를 만날 경우 <>짝이 완성 되었기 때문에 더 이상 단어를 뒤집지 않는 알고리즘을 비활성화 시켜야한다.
위에 풀이 point에서 나온 알고리즘을 그대로 구현한다.
//백준 17413, 단어 뒤집기 2
#include <iostream>
#include <stack>
std::stack<char> stack;
int main(){
std::string s;
std::getline(std::cin, s);
bool flag = false;
for(int i{0}; i<s.size(); ++i){
if(s[i] == ' '){
while(!stack.empty()){
std::cout << stack.top();
stack.pop();
}
std::cout << ' ';
}
else if(s[i] == '<'){
while(!stack.empty()){
std::cout << stack.top();
stack.pop();
}
flag = true;
std::cout << s[i];
}
else if(s[i] == '>'){
flag = false;
std::cout << s[i];
}
else if(flag) std::cout << s[i];
else stack.push(s[i]);
}
while(!stack.empty()){
std::cout << stack.top();
stack.pop();
}
std::cout << ' ';
return 0;
}