728x90
반응형
문제
코드
Scanner대신 BufferedReader, Writer를 써봤다. 이걸로 쓰는 습관을 들이는게 좋을듯.
먼저 어떻게 풀지 생각해보면..
개행문자나 공백을 구분해서 역순으로 출력해야한다.
이 경우 스택을 쓰는게 간편하고, 일반적인 배열로도 풀 수 있지만 효율이 안좋으니 그건 패스하도록 하겠다.
(그냥 문자열 입력받고, 배열의 크기만큼 for문돌려서 뒷 인덱스부터 출력하면된다. 근데 스택이있잖아?)
암튼 전체 코드다.
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(bf.readLine());
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
while (t-- > 0) {
String str = bf.readLine() + "\n";
Stack<Character> s = new Stack<>();
for (char ch : str.toCharArray()) {
if (ch == '\n' || ch == ' ') {
while (!s.isEmpty()) {
bw.write(s.pop());
}
bw.write(ch);
} else {
s.push(ch);
}
}
}
bw.flush();
}
}
여기서 중요한 부분만 추려보자면..
while (t-- > 0) {
String str = bf.readLine() + "\n";
Stack < Character > s = new Stack < > ();
for (char ch: str.toCharArray()) {
if (ch == '\n' || ch == ' ') {
while (!s.isEmpty()) {
bw.write(s.pop());
}
bw.write(ch);
} else {
s.push(ch);
}
}
}
bw.flush();
line1- 입력받은 횟수만큼
line2- 새로운 문자열을 입력받는다.
line3- 스택 선언
line4- 입력받은 문자열을 배열로 변환해주고, ch가 배열크기만큼 돈다.
line5- 개행이나 공백이면
line6~ - 그리고 이 때, 스택이 비어있지 않다면 출력을 하고, 아니라면 ch, 즉 공백이나 개행을 출력한다.
line10- 공백이 아니라면 스택에 push해주자.
그니까 쉽게말하자면, 공백이나 개행을 만날때마다 역순으로 출력해줘서 스택을 비우고, 다시 채우는거다.
결과
728x90
반응형
'PS, 언어 공부 > 알고리즘 문제풀이' 카테고리의 다른 글
[C++] 백준 온라인 저지 1712 (0) | 2020.09.08 |
---|---|
[JAVA] 백준 온라인 저지 9012 (0) | 2020.06.25 |
[JAVA] 백준 온라인 저지 10828 (0) | 2020.06.25 |
[C++] 백준 온라인 저지 10992 (0) | 2020.05.16 |
[C++] 백준 온라인 저지 2438 (0) | 2020.05.14 |