본문 바로가기

코딩테스트 연습/Baekjoon

[Baekjoon] 17413번: 단어 뒤집기2 (c++)

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

 

17413번: 단어 뒤집기 2

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

www.acmicpc.net

<와 > 사이에있는 문자열은 큐에 넣어서 그대로 출력, 일반 문자열은 스택에 넣어서 거꾸로 출력했다. 일반 문자열은 시작태그 <를 만나거나 공백, 널문자를 만나면 거꾸로 출력되게 했고 < > 사이의 문자열은 <로 시작해서 >로 끝날때까지 큐에 넣고 그대로 출력했다

코드

//  17413
#include <iostream>
#include <string>
#include <stack>
#include <queue>

using namespace std;

int main(int argc, const char *argv[])
{
    string input;
    stack<char> st;
    queue<char> q;
    getline(cin, input);
    
    for(int i=0;i<100001;i++){
        if( input[i] == ' ' || input[i] == '<' || input[i] == '\0') {
                while(!st.empty()){
                cout << st.top();
                st.pop();
                }
                if(input[i] == ' ') cout<< " ";
        }
        else if(input[i] != ' ') st.push(input[i]);
 
        if(input[i] == '<'){
            while(input[i] != '>'){
                q.push(input[i]);
                i++;
            }
            q.push('>');
            while(!q.empty()){
                cout << q.front();
                q.pop();
            }
        }
        
        if(input[i] == '\0')break;
        }
    return 0;
}