본문 바로가기

Algorithm/String

(C++) - 백준(BOJ) 9093번 : 단어 뒤집기 답

반응형

www.acmicpc.net/problem/9093

 

9093번: 단어 뒤집기

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

www.acmicpc.net

문자열을 처리한 후 답을 출력하는 간단한 문제였습니다.

 

 

풀이방법

 cin의 입력버퍼에는 정수 t와 \n이 들어갑니다. 이는 없어지지 않습니다. getline()에서

 인자입력을 \n(default)으로 구분하기 때문에 cin의 입력버퍼를 비워줘야 됩니다.

 따라서 cin.ignore()를 사용해 입력버퍼를 비워줘야 합니다.

 

 1. test case 변수인 t를 입력받고 cin의 buffer를 비워준 뒤 한줄로 문장을 입력을 받습니다. 

 2. ' '를 구분하여 이루어진 문장의 각 단어를 뒤집습니다. 

 3. 뒤집은 결과를 출력합니다.

 

 

Code

#include <bits/stdc++.h>
using namespace std;
int t;
string getReversedWord(string word){
    string reversedWord = word;
    int size = reversedWord.size();
    for(int i = 0; i < size/2; i++){
        swap(reversedWord[i],reversedWord[size - 1-i]);
    }
    return reversedWord;
}

int main(){
    cin >> t;
    cin.ignore();
    while(t--){
        string sentence, ans = "";
        getline(cin,sentence);
        for(int pivot = 0; pivot < sentence.size(); pivot++){
            string word = "";
            while(sentence[pivot]!=' ' && pivot != sentence.size()){
                word += sentence[pivot++];
            }
            word = getReversedWord(word);
            ans += word + ' ';
        }
        cout << ans <<'\n';
    }
}