Hayden's Archive
[알고리즘] 백준 - 9093번 : 단어 뒤집기 본문
알고리즘 문제 출처 : https://www.acmicpc.net/problem/9093
내가 작성한 코드
문자를 스택에 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();
}
}