본문 바로가기
백준

[백준 9093] 단어 뒤집기, C++

by 황인태(intaehwang) 2020. 1. 8.
반응형

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

 

9093번: 단어 뒤집기

문제 문장이 주어졌을 때, 단어를 모두 뒤집어서 출력하는 프로그램을 작성하시오. 단, 단어의 순서는 바꿀 수 없다. 단어는 영어 알파벳으로만 이루어져 있다. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는 공백이 하나 있다. 출력 각 테스트 케이스에 대해서, 입력으로 주어진 문장의 단어를 모두 뒤집어

www.acmicpc.net

 본 문제는 2001 ICPC Asia Regional Taejon PA번 문제다. 문장이 주어졌을 때, 단어를 모두 뒤집어서 출력하는 문제다. stack을 이용하여 풀 수 있다. 코드에 보면 string s에 '\n'을 추가하였다. 이유는 문제에서 ' '을 기준으로 단어가 뒤집히는데 문자열 마지막은 ' '가 아니므로 단어가 뒤집히지 않는다. 그렇기 때문에 한 번 더 while문을 사용해야 한다. 그러나 while을 한번 더 사용하면 코드가 멋이 없어진다. (??? : "while을 한번 더 쓰면 멋이 없기 때문에 '\n'을 추가하였다." - 2020. 01. 백준 오프라인 강의 중) 따라서, 단어를 뒤집는 기준을 ' '와 '\n'로 하여 멋있는 코드를 작성하였다.

  1.  ' '와 '\n'이 아닐 경우, stack에 push
  2. 맞으면 출력 후 pop
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main() {
    int t;
    cin >> t;
    cin.ignore();
    while (t--) {
        string s = "";
        getline(cin, s);
        s += ' ';
        stack<char> st;
        for (int i = 0; i < s.size(); i++) {
            if (s[i] == ' ') {
                while (!st.empty()) {
                    cout << st.top();
                    st.pop();
                }
                cout << s[i];
            }
            else st.push(s[i]);
        }
    }
}
cs
반응형

'백준' 카테고리의 다른 글

[백준 1874] 스택 수열, C++  (0) 2020.01.08
[백준 9012] 괄호, C++  (0) 2020.01.08
[백준 10828] 스택, C++  (0) 2020.01.08
[백준] 7569 - 토마토, C++  (0) 2020.01.08
[백준 2468] 안전 영역, C++  (0) 2020.01.07
Buy me a coffeeBuy me a coffee

댓글