https://www.acmicpc.net/problem/9093
스택의 FILO을 이용하여 순서를 뒤집을 수 있으니 이를 이용했다.
문자를 읽어들이다가 공백을 만나면 읽어들이는것을 멈추고, 스택을 top에서 부터 출력한다.
자세한 내용은 코드를 보며 이해하자.
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));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for(int i=0; i<T; i++) {
// 문자들을 받을 스택을 만들어준다.
Stack<Character> stack = new Stack<>();
// 문자열을 받는다.
String str = br.readLine();
// 문자열의 길이만큼 반복문을 실행시켜준다.
for(int j=0; j<str.length(); j++) {
// 문자 하나하나를 char로 받아준다.
char ch = str.charAt(j);
// 만약 받은 문자가 공백문자가 아니라면,
if(ch != ' ') {
// 스택에 해당 문자를 push해준다.
stack.add(ch);
// 만약 받은 문자가 공백문자라면,
}else {
// 스택에 들어있는 문자들이 없어질때까지,
while(!stack.isEmpty()) {
// 스택의 내용들을 꺼내준다.
sb.append(stack.pop());
}
sb.append(" ");
}
}
/*
여기에서 예외처리를 하지 못해서 애먹었었는데...
만약 공백문자를 만났을 때만 스택의 내용들을 꺼내주면
마지막 문자를 받았을 때는 스택의 내용을 꺼내주지 못해
마지막 단어는 아에 출력되지 않는다.
그래서 마지막 문자를 받았을 때도 스택의 내용을 꺼내주도록 해주어야 한다.
이를 위해서 스택에서 꺼내지 못한 내용들을 마지막으로 한번 더 꺼내주는 작업이다.
*/
while(!stack.isEmpty()) {
sb.append(stack.pop());
}
sb.append(" ");
sb.append("\n");
}
System.out.print(sb);
}
}
- 느낀 점
예외처리의 중요성
'[JAVA] > 자바[JAVA] 백준' 카테고리의 다른 글
BOJ(백준 온라인 저지) 1874번 with 자바[JAVA] (0) | 2022.01.18 |
---|---|
BOJ(백준 온라인 저지) 9012번 with 자바[JAVA] (0) | 2022.01.18 |
BOJ(백준 온라인 저지) 10828번 with 자바[JAVA] (0) | 2022.01.18 |
BOJ(백준 온라인 저지) 2884번 - 단계별로 풀어보기 with 자바[JAVA] (0) | 2022.01.13 |
BOJ(백준 온라인 저지) 14681번 - 단계별로 풀어보기 with 자바[JAVA] (0) | 2022.01.12 |