개발자 첫걸음/백준
[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--;
}
}
}
결과 메시지>