May 05, 2020
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;
}