본문 바로가기

문과 코린이의, [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;
}

 


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