import java.util.Scanner;
import java.util.Stack;
public class wordReverse {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int count = Integer.parseInt(sc.nextLine());
StringBuilder result = new StringBuilder();
for (int i = 0; i < count; i++) {
String sentence = sc.nextLine() + "\n";
Stack stack = new Stack<>();
for (int j = 0; j < sentence.length(); j++) {
if (sentence.charAt(j) == ' ' || sentence.charAt(j) == '\n') {
while (!stack.empty()) {
result.append(stack.pop());
}
result.append(sentence.charAt(j));
}
else {
stack.add(sentence.charAt(j));
}
}
}
System.out.print(result.toString());
}
}
Input을 하기 위해 사용한 함수를 정리해보자.
import java.util.Scanner;
import java.util.Stack;
public class wordReverse {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int count = Integer.parseInt(sc.nextLine()); //test case 개수 파악
StringBuilder result = new StringBuilder();
for (int i = 0; i < count; i++) {
String sentence = sc.nextLine() + "\n"; //문장 한줄 읽기
Stack stack = new Stack<>();
for (int j = 0; j < sentence.length(); j++) {
if (sentence.charAt(j) == ' ' || sentence.charAt(j) == '\n') { //띄어쓰기 or 문장이 끝났을때
while (!stack.empty()) { //스택이 비어있지 않다면
result.append(stack.pop()); //현재 스택에 있는 것을 pop해서 결과 스택에 add
}
result.append(sentence.charAt(j)); //결과 스택에 띄어쓰기 or 엔터 add
}
else {
stack.add(sentence.charAt(j)); //다음 띄어쓰기 전까지 문자열 스택에 넣기
}
}
}
System.out.print(result.toString()); //결과 출력
}
}
처음에는 stack에서 pop하면서 바로 print했는데 이렇게 하니까 시간초과가 뜨길래 결과를 한번에 print하는 방법으로 바꿨다. 그래서 StringBuilder라는 클래스를 사용했다.