본문 바로가기

Algorithm Problems/구현

[백준/C++] 4072번: Words

문제

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> 선언해야 한다.