Hayden's Archive

[알고리즘] 백준 - 9093번 : 단어 뒤집기 본문

Algorithm

[알고리즘] 백준 - 9093번 : 단어 뒤집기

_hayden 2020. 7. 7. 23:44

알고리즘 문제 출처 : https://www.acmicpc.net/problem/9093

 

9093번: 단어 뒤집기

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

www.acmicpc.net

 

내가 작성한 코드

문자를 스택에 push하다가 공백(" ")을 만나면 pop해서 꺼낸다. 마지막 문자열 같은 경우 뒤에 공백이 없는데 그래서 마지막 문자일 경우를 따로 pop해서 꺼낼 수 있도록 조건을 따로 뒀다.

Scanner로 하다가 줄 단위로 받는 건 BufferedReader와 BufferedWriter를 사용하는 게 더 좋을 것 같아서 방법을 바꿨다. 또 String 타입으로 answer라는 변수를 따로 둬서 거기에 하나씩 저장해간 후 한꺼번에 출력하려고 했는데 그렇게 하려고 하니까 자꾸 메모리 초과가 떴다. 결국 스택에서 뺄 때마다 출력하는 것으로 바꿨다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;

public class Main {
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int num = Integer.parseInt(br.readLine());
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		for(int i=0; i<num; i++) {
			String str = br.readLine();
			Stack<String> stack = new Stack<>();
			for(int j=0; j<str.length(); j++) {
				if(j==str.length()-1) {
					stack.push(str.substring(j,j+1));
					while(!stack.isEmpty()) {
						bw.write(stack.pop());
					}
					break;
				}
				else if(str.substring(j,j+1).equals(" ")) {
					while(!stack.isEmpty()) {
						bw.write(stack.pop());
					}
					bw.write(" ");
					continue;
				}
				stack.push(str.substring(j,j+1));
			}
			bw.write("\n");
		}
		bw.flush();
		bw.close();
	}
}