-
백준 9093번(단어 뒤집기) c++백준 문제 2021. 9. 6. 01:29728x90
문장을 받아서 공백을 기준으로 뒤집어주면 됩니다.
int T; cin>>T; cin.ignore();
먼저 테이스케이스 T를 입력받습니다.
여기서 cin.ignore() 함수를 사용했는데 버퍼를 비워주는 역할을 합니다.
왜 여기서 버퍼가 제대로 안비워졌는지는 정확히는 모르겠습니다만 계속 버퍼가 안비워져서 cin.ignore()를
사용했습니다. 버퍼에 관한건 추가적으로 다시 조사하겠습니다.
while (T--) { string st; getline(cin, st); string st2 = st + ' '; int start = 0; for (int i = 0; i < st2.size(); i++) { if (st2[i] == ' ') { reverse(st2.begin() + start, st2.begin() + i); start = i + 1; } } cout << st2<<'\n'; }
while 문을 T만큼 반복해 줍니다.
문자열 st를 입력받습니다. 여기서 cin함수로 받지않고 getline함수로 받았는데
공백까지 입력을 받아야하기 때문입니다. cin함수는 공백을 받지 못합니다.
그 다음 st2를 입력받은 st에 공백문자를 더해주었습니다.
string문자열은 맨끝에 아무문자도 없기 때문에 맨 마지막에 공백 문자를 더해주면 공백문자 전까지
단어를 역배치 할 수 있게 됩니다.
start변수는 0으로 초기화 해줍니다. start변수는 공백이 나올때 마다 새롭게 갱신 될 수 있게 해줬습니다.
start변수는 reverse함수에 처음 인자 역할을 하게됩니다.
for문 안에 if문은 공백이 나올때 공백 전까지의 단어를 역배치 하게 하였습니다.
마지막으로 역배치된 st2함수를 출력해주면 끝이 납니다.
전체 코드입니다.
#include<iostream> #include<algorithm> #include<string> using namespace std; int main() { ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL); int T; cin >> T; cin.ignore(); while (T--) { string st; getline(cin, st); string st2 = st + ' '; int start = 0; for (int i = 0; i < st2.size(); i++) { if (st2[i] == ' ') { reverse(st2.begin() + start, st2.begin() + i); start = i + 1; } } cout << st2<<'\n'; } return 0; }
'백준 문제' 카테고리의 다른 글
백준 10610(30) c++ (0) 2021.09.09 백준 2346(풍선 터뜨리기) c++ (0) 2021.09.06 백준 2993(세 부분) c++ (0) 2021.09.06 백준 1008(A/B) c++ (0) 2021.09.05 백준 1158(요세푸스 문제) c++ (0) 2021.09.05