BOJ 17413

단어 뒤집기 2

문제출처

문제 해석

  • 주어지는 문자열에서 단어만 뒤집어서 출력하는 문제입니다.
  • 태그는 ‘<’로 시작해서 ‘>’로 끝나는 길이가 3 이상인 문자열이고 각 괄호사이에 알파벳 소문자또는 공백만 있습니다. 태그는 단어가 아닙니다.

설계(5)

  • 문자열 파싱문제입니다.
  • 먼저, 입력에 공백이 포함되므로 getline함수를 이용합니다.
  • ’<’가 나오면 ‘>’가 나올 때까지 문자열을 저장한 후, ans 문자열에 추가합니다.
  • 공백이 아닌 단어가 시작될만한 위치가 나오면 ‘<’,’>’ 또는 공백이 나오기 전까지 문자열을 저장한 후, reverse함수로 뒤집어줍니다.

구현(10)

코드
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;

string ans;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    string arr;
    getline(cin,arr);
    int N = arr.length();
    for (int i = 0; i < N; i++){
        if (arr[i] == '<'){
            string sum = "";
            while (arr[i]!='>') {
                sum += arr[i++];
            }
            sum += arr[i];
            ans += sum;
        }
        else if (arr[i] == ' ') ans+=arr[i];
        else{
            string sum = "";
            while (i<N&&!(arr[i]=='<'||arr[i]=='>'||arr[i]==' ')){
                sum += arr[i++];
            } 
            reverse(sum.begin(),sum.end());
            ans += sum;
            i--;
        }
    }
    cout << ans <<"\n";
    return 0;
}
디버깅
제출결과
  • 0 ms

마무리

  • 문자열 파싱문제였습니다. 입력을 받는 부분만 조심하면 어렵지 않게 구현이 가능합니다.