본문 바로가기

문과 코린이의, [C. C++] 기록/C++ 백준 문제풀이

[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 단어 뒤집기 (9093)

반응형

[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 단어 뒤집기 (9093)

[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 단어 뒤집기 (9093)

 


 

 

9093번: 단어 뒤집기

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는

www.acmicpc.net

 

[ 문제 ]

문장이 주어졌을 때, 단어를 모두 뒤집어서 출력하는 프로그램을 작성하시오. 단, 단어의 순서는 바꿀 수 없다. 단어는 영어 알파벳으로만 이루어져 있다.

[ 입력 ]

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는 공백이 하나 있다.

[ 출력 ]

각 테스트 케이스에 대해서, 입력으로 주어진 문장의 단어를 모두 뒤집어 출력한다.

 


[ 코드 1 ]

#include<iostream>
#include<string>
using namespace std;
class Stack {
public:
char stack[1000];
int size;
Stack() { size = 0; }
void Push(char data) {
stack[size] = data;
size += 1;
}
char Pop() {
if (!empty())
{
stack[size - 1] = 0;
size -= 1;
return stack[size];
}
}
bool empty() {
if (size == 0)
{
return true;
}
else
{
return false;
}
}
char top() {
if (!empty())
{
return stack[size - 1];
}
}
};
int main() {
int T; // 테스트 케이스 개수
cin >> T;
cin.ignore(); // getline을 쓰기 위해
Stack s; // 객체 생성
while (T--)
{
string str; // 문자열 입력
getline(cin, str); // string 클래스의 getline() 실행
str += '\n';
for (int i = 0; i < str.length(); i++)
{
if (str[i] == ' ' || str[i] == '\n') // 만약 해당 문자가 공백 또는 \n이라면
{
while (!s.empty())
{
cout << s.top();
s.Pop();
}
cout << ' ';
}
else if (str[i] != ' ') // 만약 해당 문자가 공백이 아니라면
{
s.Push(str[i]);
}
}
cout << '\n';
}
return 0;
}

 

[ 코드 2 ]

#include<iostream>
#include<string>
#include<stack> // 스택 부분 추가
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
// 이 두 줄을 통해, cin/cout을 scanf/printf만큼 빠르게 사용할 수 있도록 한다.
int T; // 테스트 케이스 개수
cin >> T;
cin.ignore(); // getline을 쓰기 위해
while (T--)
{
string str; // 문자열 입력
getline(cin, str); // string 클래스의 getline() 실행
str += '\n';
stack<char>s; // 스택 부분 <char>형으로 변환
for (int i = 0; i < str.length(); i++)
{
if (str[i] == ' ' || str[i] == '\n') // 만약 해당 문자가 공백 또는 \n이라면
{
while (!s.empty())
{
cout << s.top();
s.pop();
}
cout << ' ';
}
else if (str[i] != ' ') // 만약 해당 문자가 공백이 아니라면
{
s.push(str[i]);
}
}
cout << '\n';
}
return 0;
}

 


* 유의사항
- 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다.
- 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다.
- 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :)
반응형