개발자 첫걸음/백준

[BOJ 9093] 단어 뒤집기

프로아마추어 2021. 10. 21. 00:36

문제>

 

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

 

처음 답을 제출했을 때 코드 상의 문제는 없는데 계속 메모리를 초과했다는 문구가 발생했다.

아래는 그 문제의 코드이다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
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());
		String result = "";
		Stack<Character> stk = new Stack<Character>();
		
		while(num>0) {
			
			String[] str = br.readLine().split(" ");
			
			for(String s: str) {
				
				for(int i=0;i<s.length(); i++) {
					stk.push(s.charAt(i));
				}
				
				while(!stk.isEmpty()) {
					result += stk.pop();
				}
				
				result+=" ";
			}
			stk.clear();
			
			System.out.println(result.trim());
			
			result="";
			num--;
		}
	}
}

인터넷을 검색하다가 Scanner사용이 아닌 Buffer를 사용하면 코드를 좀 더 빨리 처리한다는 글을 보았다. 처리 속도를 지연시키는 for문도 최대한 배제하였는데 동일한 에러가 발생하였다.

 

결국 toCharArray()라는 메소드를 찾게 되었고 이를 이용하니 문제의 에러를 해결할 수 있었다. 늘 for문에 String 문자열을 넣어서 charAt()메소드를 사용하였는데 잦은 배열 선언이 문제의 원인이 아니었나싶다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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());
	String result = "";
	String sample = "";
	Stack<Character> stk = new Stack<Character>();
	
	while(num>0) {
		String str = br.readLine();
		str+=" ";
		
		for(char s:str.toCharArray()) {
			if(s==' ') {
				while(!stk.isEmpty()) {
					result += stk.pop();
				}
				
				result+=" ";
				stk.clear();
				
			} else {
				stk.push(s);
			}
		}
		
			System.out.println(result.trim());
			result="";
			num--;
		}
	}
}​

 

결과 메시지>