[9093] C++ : 단어 뒤집기
2022. 8. 24. 02:27
문제
문장이 주어졌을 때, 단어를 모두 뒤집어서 출력하는 프로그램을 작성하시오. 단, 단어의 순서는 바꿀 수 없다. 단어는 영어 알파벳으로만 이루어져 있다.
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는 공백이 하나 있다.
출력
각 테스트 케이스에 대해서, 입력으로 주어진 문장의 단어를 모두 뒤집어 출력한다.
예제 입력 1
2
I am happy today
We want to win the first prize
예제 출력 1
I ma yppah yadot
eW tnaw ot niw eht tsrif ezirp
풀이
이 문제는 작년 프로그래밍 기초 할 때 만나본 문제인 것 같다. 매우 간단한 문제 중 하나라고 생각한다. 작년에는 이 문제를 해결할 때 C언어를 사용했고 strtok로 단어 단위를 잘라서 단어 길이만큼 역순으로 출력하는 방법으로 풀었다. 근데 이제 보니 그런 방법 보다 스택을 사용하면 훨씬 간단하게 풀 수 있을 것 같았다.
공백이 아니라면 스택에 하나씩 넣고 공백을 만나면 스택의 모든 요소를 하나씩 꺼내 출력하고 공백을 하나 출력하면 깔끔하게 문장이 반대로 출력된다.
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main()
{
int number;
cin >> number;
getchar();
stack<char> s;
for (int i = 0; i < number; i++) {
string sentence;
getline(cin, sentence);
for (int j = 0; j < sentence.length(); j++)
{
if (sentence.at(j) == ' ')
{
while (1)
{
if (s.empty())
break;
cout << s.top();
s.pop();
}
cout << ' ';
}
else
s.push(sentence.at(j));
}
while (1)
{
if (s.empty()) {
cout << '\n';
break;
}
cout << s.top();
s.pop();
}
}
return 0;
}
이때까지 C++에서 한줄을 받는 방법을 몰랐는데 string 헤더에 있는 getline을 사용하면 된다는 것을 알게 되었다.
'Computer Science > Baekjoon' 카테고리의 다른 글
[1874] C++ : 스택 수열 (0) | 2022.08.25 |
---|---|
[9012] C++ : 괄호 (0) | 2022.08.24 |
[24479] C++ : 알고리즘 수업 - 깊이 우선 탐색 1 (0) | 2022.08.22 |
[24416] C++ : 알고리즘 수업 - 피보나치 수 1 (0) | 2022.08.18 |
[1991] C++ : 트리 순회 (0) | 2022.08.18 |