<문제>
<풀이>
이것도 앞의 문제와 마찬가지로 BufferedReader, BufferedWriter를 사용해야 시간초과가 안뜸.
단어의 순서는 유지하고, 단어를 뒤집어서 출력해야 하므로
띄어쓰기를 기준으로 Stack에 넣고 출력하기로 함.
1. 일단 한 문장을 입력 받아 char 배열에 넣음
2. for each문으로 순서대로 검사.
3. 띄어쓰기가 나오기 전까지 Stack에 계속 추가하다가
4. 띄어쓰기가 나오면 Stack에 넣은 모든 문자들을 pop()해서 버퍼Writer에 쓰기.
(주의사항: 한 단어를 출력하는 것이니 모두 다 write()한 후 띄어쓰기(공백)를 추가로 write..)
5. (3~4)번 반복하다가 마지막 단어까지 Stack에 추가하고 나면, 더 이상 띄어쓰기가 나오지 않으므로
다음문장을 입력받기 전에 Stack의 문자들을 Writer에 write()해야 함.
!!bw.close() 혹은 bw.flush() 해 주어야 제대로 출력됨.
import java.util.*;
import java.io.*;
public class RverseWord {
//1. 문장 입력 받기
//2. 스택에 넣기
//3. 스택에 넣은 거 (pop)출력
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
try {
int n = Integer.parseInt(br.readLine()); //입력 받을 문장의 수
for (int i = 0; i < n; i++) {
Stack<Character> st = new Stack();
char[] input = br.readLine().toCharArray();
for (char c : input) {
if (c != ' ') {
st.add(c);
} else {
//공백 문자 나오면 문자 출력
while (!st.empty()) {
bw.write(st.pop());
}
bw.write(" ");
}
}
//문장의 마지막 단어 출력
while (!st.empty()) {
bw.write(st.pop());
}
bw.write("\n");
}
bw.close();
br.close();
}catch (IOException e) {
e.printStackTrace();
}
}
}
<결과>
'알고리즘 공부...공......공' 카테고리의 다른 글
[백준: 알고리즘_Java] 1463_1로 만들기 (2) | 2022.01.02 |
---|---|
[백준: 알고리즘_Java] 17298_오큰수 (0) | 2022.01.01 |
[백준: 알고리즘_Java] 1874번_스택 수열 (1) | 2021.12.29 |
[백준: 알고리즘_Java] 9012번_괄호 (0) | 2021.12.26 |
[백준: 알고리즘_Java] 10828_스택 (0) | 2021.12.24 |
댓글