[백준 알고리즘] 9093번: 단어 뒤집기

[백준 알고리즘] 9093번 : 단어 뒤집기(C++)

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

문제

문제 문장이 주어졌을 때, 단어를 모두 뒤집어서 출력하는 프로그램을 작성하시오. 단, 단어의 순서는 바꿀 수 없다. 단어는 영어 알파벳으로만 이루어져 있다.

입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는 공백이 하나 있다.

출력 각 테스트 케이스에 대해서, 입력으로 주어진 문장의 단어를 모두 뒤집어 출력한다.

풀이

오랜만에 문제를 풀었다.. 어려운 문제도 아니라고 생각하고 5분이면 할 줄 알았는 생각보다 시간이 좀 걸렸다.. 옛날에 split 함수를 써본 기억이 있는 것 같은데 c++ 표준 라이브러리가 아니었나보다. stringstream 라이브러리를 새로 공부하게 되었는데 이 안에 들어있는 ss 를 통해서 공백기준으로 문장을 쪼개고, 쪼개진 문장을 단어단위로 받아서 역순으로 출력해주었다.

테스트케이스 정수를 입력받을 때 입력한 엔터가 버퍼에 남아있어 getline이 이걸 읽어들이는 문제가 발생해 정수 입력 직후에 cin.ignore()를 통해 버퍼를 비워주었다.

코드

#include<iostream>
#include<string>
#include<sstream>

using namespace std;

int main (){
    int T;
    cin >> T;
    cin.ignore();
    while(T--){
        string sentence;
        getline(cin, sentence);
        stringstream ss(sentence);

        string word;
        while(ss >> word){
            for(int i = word.length()-1 ; i >= 0 ; i--){
                cout<< word[i];
            }
            cout << " ";
        }
        cout << "\n";
    }
    return 0;
}

Written by@전여훈 (Click Me!)
고민이 담긴 코드를 만들자, 고민하기 위해 공부하자.