문제 설명

문제 링크

http://icpc.me/17413

 

17413번: 단어 뒤집기 2

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

www.acmicpc.net

풀이

스택을 이용하여 풀이할 수 있다.

문자열을 처음부터 읽으면서 아무것도 만나지 않았을 때는 stack에 담다가 <을 만나거나 공백을 만나면 stack의 모든 문자열을 pop 하면 된다. 그리고 만약 <을 만났다면 >를 만날 때까지 그냥 출력한다.

코드

#include <cstdio>
#include <stack>
#include <cstring>

using namespace std;

char s[100005];
stack<char> st;

int main() {
    scanf("%[^\n]", s);
    int sz = strlen(s);
    bool flag = false;
    for (int i = 0; i < sz; i++) {
        if (s[i] == '<') {
            while (!st.empty()) {
                printf("%c", st.top());
                st.pop();
            }
            printf("<");
            flag = true;
        }
        else if (s[i] == '>') {
            printf(">");
            flag = false;
        }
        else if (flag) printf("%c", s[i]);
        
        else if (s[i] == ' ') {
            while (!st.empty()) {
                printf("%c", st.top());
                st.pop();
            }
            printf(" ");
        }
        else st.push(s[i]);
    }
    while (!st.empty()) {
        printf("%c", st.top());
        st.pop();
    }
}
 
복사했습니다!