알고리즘/문제 풀이

백준 17413 - 단어 뒤집기

qqlzzb 2022. 6. 3. 20:58

문제 https://www.acmicpc.net/problem/17413

 

17413번: 단어 뒤집기 2

문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져

www.acmicpc.net

 

풀이

 

조건이 많아서 까다로웠던 문제다.. 하나 고치면 하나 안되고....

<> 안에 들어간 문자열은 뒤집지 않고, 그 외의 문자열만 뒤집는 것이기 때문에

<> 안에 들어가는 문자열은 큐에 넣고, 그 외는 스택에 넣도록 했다. 

 

코드

#include <iostream>
#include <stack>
#include <queue>
using namespace std;

char str[100010];
stack <char> st;
queue <char> qu;

int main()
{
    int flag = -1;
    cin.getline(str,100010);
    int cnt=0;
    for(int i=0; i<100001; i++)
    {
        if(str[i]=='\0') break;;
        cnt++;
    }

    int scnt=0;
    for(int i=0; i<cnt+1; i++)
    {
        if(str[i]=='>') scnt--;
        if(!flag && str[i]=='>' && scnt==0)
        {
            while(!qu.empty())
            {
                cout<<qu.front();
                qu.pop();
            }
            
            cout<<">";
            flag=1;
            i++;
        }
        if(flag!=0 && str[i]==' ' || str[i]=='\0' ||(flag!=0&&str[i]=='<'))
        {
            if(!st.empty())
            {
                while(!st.empty())
                {
                    cout<<st.top();
                    st.pop();
                }
            }
            if(str[i]==' ') 
            {
                cout<<' ';
                i++;
            }
        }
        if(str[i]=='<')
        {
            flag = 0;
            scnt++;
        }
        if(flag==0) qu.push(str[i]);
        if(flag!=0) st.push(str[i]);
    }
}

'알고리즘 > 문제 풀이' 카테고리의 다른 글

백준 9613 - GCD 합  (0) 2022.06.05
백준 4948 - 베르트랑 공준  (0) 2022.06.04
백준 1213 - 팰린드롬 만들기(C++)  (0) 2022.06.02
백준 4673 - 셀프 넘버  (0) 2022.03.29
백준 1475 - 방 번호  (0) 2022.03.23