[백준 BOJ] 9093번 단어 뒤집기 (C++/cpp)

2022. 8. 17. 11:31PS (Program Solving)/BOJ (백준)

문제 설명

https://www.acmicpc.net/problem/9093

 

9093번: 단어 뒤집기

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

www.acmicpc.net

백준 BOJ 9093번 단어 뒤집기 문제 사진

 

접근 방법 - 스택을 이용한 문자열 연산 문제

백준의 9093번 문제는 스택을 이용하여 해결할 수 있는 문자열 연산 문제이다.

해당 문제는, 입력받은 문자열에 대하여 공백의 위치는 유지하되 각 단어의 문자는 순서를 뒤집어 출력해야 하는 문제이다.

이 문제는 사실상 문자열의 성질만 이용하여 해결할 수도 있는 문제이지만 필자는 스택을 이용하여 해결해보았다.

(굳이 스택을 사용할 이유가 사실 정말 없긴 하다. 간단하게 풀고 싶은 사람은 뒤로 가기 누르기)

이때, 해당 문제는 숫자와 문자열이 함께 입력값으로 주어지기 때문에 이 점을 유의해가며 문제를 풀어보길 바란다.

혹여나 해당 문제를 해결하는 데에 어려움을 겪고 있다면, 아래의 설명과 코드를 한번 참고해보길 바란다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) 입력받을 문자열의 수(n)를 입력받는다.

 

2) 이다음에 문자열을 원활하게 입력받기 위해 cin.ignore()를 통하여 버퍼를 비워둔다.

 

3) n의 크기만큼 반복문을 수행하여 아래의 연산을 취한다.

- 공백을 포함하여 문자열(st)을 하나씩 입력받는다.

(getline() 문장을 통하여 공백을 포함한 문자열을 입력받는다.)

- 문자열에 대한 연산을 하기 위해 char형 스택(s)을 선언해둔다.

- 다른 반복문을 통하여 st의 문자들을 하나씩 탐색한다.

만일 현재 탐색값이 공백이 아니라면 s에 현재 문자의 값을 push한다.

만일 현재 탐색값이 공백이면 스택이 빌 때까지 스택의 값을 하나씩 pop하며 출력을 수행한다.

(만일 문자열의 마지막 값에 다다랐다면, 하나의 문자열에 대한 입력은 이 이후로 더 이상 없을 것이다.

따라서 이 경우에도 스택이 빌 때까지 스택의 값을 하나씩 pop하며 출력을 수행하도록 한다.)

- 하나의 문자열에 대한 결과를 모두 출력하였다면, 줄바꿈을 한 뒤 다음 순서의 반복문을 수행하도록 한다.

 

4) 3)에서 모든 연산이 끝났다면, 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <string>
#include <stack>
#define endl '\n'
using namespace std;

//백준 9093번 코드
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);	cout.tie(NULL);

	int n;
	cin >> n;
	cin.ignore();
	for (int i = 0; i < n; i++) {
		string st;
		getline(cin, st);

		stack<char> s;
		for (int j = 0; j < st.length(); j++) {
			if (st[j] != ' ') {
				s.push(st[j]);
			}
			if (st[j] == ' ' || j == st.length() - 1) {
				while (!s.empty()) {
					cout << s.top();
					s.pop();
				}
				cout << " ";
			}
		}
		cout << endl;
	}
}

 

제출 결과

백준 BOJ 9093번 단어 뒤집기 문제 C++ 제출 결과

(2022.07.23 백준 9093번 문제 제출 결과)

자바 핵극혐

반응형