문제
https://www.acmicpc.net/problem/4072
문제 요약
문장을 한 줄씩 입력 받고, 공백을 기준으로 각 단어를 뒤집어서 문장을 출력한다.
"#"을 입력 받으면 종료한다.
코드
#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
using namespace std;
int main() {
while (true) {
string str;
// 공백 포함 입력 받기
getline(cin, str);
if (str == "#") break;
// String을 StringStream 형으로 변환한 strs 선언
stringstream strs(str);
string tmp;
// strs 에서 " " 단위로 하나씩 추출하여 tmp에 저장
while (strs >> tmp) {
// tmp를 문자열 뒤집기
reverse(tmp.begin(), tmp.end());
cout << tmp << " ";
}
cout << "\n";
}
return 0;
}
코드 설명
1. 각 줄 마다 반복문을 통해 무한 반복한다.
2. getline 함수를 통해 공백을 포함한 문자열을 입력 받는다.
3. string 형으로 받은 공백이 포함된 문자열을 stringstream형 객체로 strs를 선언한다.
4. >> 연산을 통해 strs에 대해 " " 단위로 구분하여 단어를 하나씩 추출 후 tmp에 저장하며 반복문을 돈다.
5. 각 단어를 저장한 tmp를 reverse 함수로 뒤집고, 출력한다.
6. 한 문장에 대한 연산이 끝나면 줄바꿈한다.
고찰
1. 공백을 포함한 문자열을 입력 받기 위해서는 getline 함수를 사용한다.
2. 문자열에 대해 더 다양한 연산을 하기 위해서는 stringstream형을 사용한다.
+ #include <sstream> 선언해야 한다.
3. stringstream형 변수에 >> 연산을 사용하면, 문자열 앞부터 공백을 기준으로 단어 하나를 추출할 수 있다.
4. 문자열을 뒤집기 위해서는 reverse 함수를 사용할 수 있다.
+ #include <algorithm> 선언해야 한다.
'Algorithm Problems > 구현' 카테고리의 다른 글
[백준/C++] 1244번: 스위치 켜고 끄기 (1) | 2024.10.17 |
---|---|
[백준/C++] 1251번: 단어 나누기 (2) | 2024.10.11 |
[백준/C++] 4447번: 좋은놈 나쁜놈 (0) | 2024.04.15 |
[백준/C++] 1718번: 암호 (1) | 2024.04.06 |
[백준/C++] 8989번: 시계 (1) | 2024.02.29 |