단어 뒤집기 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
마무리
- 문자열 파싱문제였습니다. 입력을 받는 부분만 조심하면 어렵지 않게 구현이 가능합니다.