https://www.acmicpc.net/problem/17413
17413번: 단어 뒤집기 2
문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져
www.acmicpc.net
풀이 :
- <> 밖에 있는 단어만 뒤집어서 출력할 것
- flag를 세워서 true면서 공백이 아닐 때만 단어를 복사하고
- 공백이 나오거나 <가 나오면 복사했던 단어를 거꾸로 뒤집어서 출력한다
- <가 나오면 flag는 false로 변경해서 그대로 출력만하다가,
- >가 나오면 다시 true로 변경해서 복사를 다시 해준다
코드 :
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main(){
cin.tie(NULL);
ios::sync_with_stdio(false);
string s, ans;
bool check = true;
getline(cin,s); //중간에 나오는 공백까지 다 입력받는 함수
s[s.size()] = ' '; //마지막 단어까지 복사해서 출력하기 위해
s += '\n'; //개행을 공백으로 바꾸고 개행을 다시 넣어줬다
for(int i=0; i<s.size(); i++){
if(check){ //check가 true일 떄
if((s[i] >= '0' && s[i] <= '9') || (s[i] >= 'a' && s[i] <= 'z')){ //숫자거나 알파벳이라면
ans += s[i]; //복사한다
}else{ //문자가 아니라면
if(s[i] == '<'){ //<가 나오면 안의 문자는 바꾸면 안되기 때문에
check = false; //check의 값을 false로 변경
}
reverse(ans.begin(), ans.end()); //복사한 단어를 뒤집어주고 출력
cout << ans;
ans = ""; //초기화
cout << s[i]; //공백이나 <는 복사가 안됐기 때문에 출력해준다
}
}else{ //check가 false일 때 = 괄호 안이라는 것
cout << s[i]; //뒤집으면 안되니까 출력만 해준다
if(s[i] == '>'){ //>가 나오면 다시 복사해야 하니까
check = true; //check를 true로 변경
}
}
}
}
'PS_Baekjoon' 카테고리의 다른 글
[백준 C++] 9625번 : BABBA (0) | 2023.03.31 |
---|---|
[백준 C++] 9342번 : 염색체 (0) | 2023.03.30 |
[백준 C++] 9324번 : 진짜 메시지 (0) | 2023.03.28 |
[백준 C++] 12789번 : 도키도키 간식드리미 (0) | 2023.03.27 |
[백준 C++] 11899번 : 괄호 끼워넣기 (0) | 2023.03.26 |