[백준] 9093번 단어 뒤집기

반응형
반응형

문제

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

입력

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

출력

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

 

원래 C++로 문제를 풀지만

나는 C++로 단어를 split을 사용할줄 모른다. 내가 알기로는 C++에도 있는걸로 알고는 있는데

이름이 다른걸로 알고 있다. 그래서 사용하지 못하고 있어서 그냥 자바로 풀었다.

 


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int n = Integer.parseInt(br.readLine());
		while(n -- > 0) {
			String temp = br.readLine();
			String[] sss = temp.split(" ");

			for (String s : sss) {
				StringBuilder sb = new StringBuilder(s);
				System.out.print(sb.reverse().toString().trim() + " ");
			}
			System.out.println();
		}
	}
}

코드부터 살펴보면

String을 StringBuilder로 치환시켰다. 치환시킨 이유는 단순히 StringBuilder에는 reverse()라는 메서드가 존재하기 때문이다. String에는 존재하지 않는다. 이 부분은 반복문을 통해 만들 수도 있지만... 귀찮아서 그냥 StringBuilder로 작성했다.

그리고 trim은 빈칸을 없애주는건데 사실 필요가 없다. 왜 사용했지?

 

아무튼 이건 값을 받아서  빈칸을 기준으로 구분지어놓으면 쉽게 해결된다.

 

#include <stdlib.h>
#include <iostream>
#include <stack>
using namespace std;
using std::string;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    string input;
    int num;
    stack<char> charStack;
    cin >> num;
    cin.ignore();

    while (num--)
    {
        getline(cin, input);
        for (int i = 0; i < input.length(); i++)
        {
            if (input[i] != ' ')
            {
                charStack.push(input[i]);
            }
            else
            {
                while (!charStack.empty())
                {
                    cout << charStack.top();
                    charStack.pop();
                }
                cout << ' ';
            }
        }
        while (!charStack.empty())
        {
            cout << charStack.top();
            charStack.pop();
        }
        cout <<  '\n';
    }
}

c++소스인데... 스택으로 풀었네...

 

반응형

댓글

Designed by JB FACTORY