728x90

🏆 목차.

  1. 문제
  2. 코드
  3. 풀이

 

🛒 문제

 

백준-17413번-단어-뒤집기-2
백준 17413번 단어뒤집기 2

 

단어 뒤집기 2는 stack을 이용하여 푸는 문제로,

해당 문제의 특징은 태그'<>' 내에 있는 단어는 뒤집어지지 않는다는 점입니다.

 

🎨 코드

 

#include<iostream>
#include<stack>
#include<string>

using namespace std;

void printStk(stack<char> &stk)
{
    while (!stk.empty())
    {
        cout << stk.top();
        stk.pop();
    }
}
int main()
{
    stack<char>stk;
    string str;
    getline(cin, str);
    bool tag = false;
    for (char ch : str)
    {
        if (ch == '<')
        {
            printStk(stk);
            tag = true;
            cout << ch;
        }
        else if (ch == '>')
        {
            tag = false;
            cout << ch;
        }
        else if (tag)
        {
            cout << ch;
        }
        else
        {
            if (ch == ' ')
            {
                printStk(stk);
                cout << ch;
            }
            else
            {
                stk.push(ch);
            }

        }
    }
    printStk(stk);
    cout<<'\n';
    return 0;
}

 

🎯 풀이

 

문자로 공백이 입력되면 stack에 있는 값을 출력하도록 printSkt 함수를  만들었습니다.

그리고 bool 값인 tag를 통해서 문자가 태그인지 아닌지 검사하도록 했습니다.

현재 문자가 태그를 여는 문자인 '<'라면 스택에 있는 문자를 모두 pop 하고 tag를 true로 해줬습니다. 그리고 현재 문자를 출력해 줍니다.

 

태그를 닫는 문자 '>'라면 tag를 false로 해주고 문자를 출력합니다.

 

만약 tag가 true라면 태그 안에 있는 문자라는 뜻으로 반전되면 안 되기 때문에 그대로 출력해 주고,

false이고 공백 ' '라면 지금까지 stack에 있는 모든 문자를 출력해 줍니다.

공백이 아니라면 tag 밖에 있는 문자라는 뜻으로 stack에 문자를 push 해 줍니다.

 

마지막으로 stack에 값이 남아있는 경우를 가정하고 printStk을 해주었습니다.

 

728x90

+ Recent posts