백준 17413 단어 뒤집기 2 / C++

이유참치·2025년 12월 15일

백준

목록 보기
176/249

문제 : 17413

풀이 point

공백과 태그를 분리해서 생각해야한다.
스택에 값을 집어넣으면 반대로 나오므로 공백전까지 스택에 집어넣다가
만나면 스택에 있는 값들을 출력하는 형태이다.

'<' 를 만날 경우 뒤집으면 안 되니 스택에 넣지 않고 바로 바로 출력한다.

'<' 를 만났을 때 이미 스택에 넣어진 값들이 있을 수 있으므로 스택에 넣은 값을 출력하는 것이 우선이다.

'>' 를 만날 경우 <>짝이 완성 되었기 때문에 더 이상 단어를 뒤집지 않는 알고리즘을 비활성화 시켜야한다.

풀이 방법

위에 풀이 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;
}
profile
임아리 - 대학생

0개의 댓글