풀이
문제는 그렇게 어렵지 않다. 공백이 나올 때마다 그전까지 나온 단어를 뒤집어 주기만 하면 되는 문제이다.
첫 번째 풀이는
- String[]에 공백 단위로 끊어 넣어준다.
- StringBuilder의 reverse()를 이용해 문자열을 뒤집어 준 뒤 다시 배열에 넣어준다.
- 배열을 출력한다.
import java.io.*;
class Main {
public static void main(String args[]) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//테스트카운트를 입력받는다
int N = Integer.parseInt(br.readLine());
for (int j = 0; j < N; j++) {
String[] str = br.readLine().split(" ");
reverse(str);
for (int i = 0; i < str.length; i++) {
System.out.print(str[i]);
System.out.print(" ");
}
System.out.println();
}
}
//파라미터로 문자열을 받아 배열에 담긴 문자열을 뒤집어 반환
public static void reverse(String[] str) {
for (int i = 0; i < str.length; i++) {
StringBuilder sb = new StringBuilder();
str[i] = String.valueOf(sb.append(str[i]).reverse());
}
}
}
두번째풀이는 스택을 이용해서 풀어줄거다.
- 입력 받은 문자열을 반복문을 통해 공백이나 개행문자가 있는지 확인한다.
- 공백이나 개행문자인 경우 스택에 담긴 값들을 StringBuilder에 넣는다.
- 공백이나 개행문자가 아닌경우 스택에 넣어준다.
- 문자열 길이만큼 반복이 끝났다면 출력한다.
import java.io.*;
import java.util.*;
class Main {
public static void main(String args[]) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
//테스트 횟수를 입력받는다.
int N = Integer.parseInt(br.readLine());
for (int i = 0; i < N; i++) {
StringBuilder sb=new StringBuilder();
Stack stack = new Stack();
String str=br.readLine();
for (int j = 0; j < str.length(); j++) {
//공백인경우
if(str.charAt(j)==' '){
while(!stack.empty()){
sb.append(stack.pop());
}
sb.append(" ");
//개행문자인 경우
}else if(str.charAt(j)=='\n'){
while(!stack.empty()){
sb.append(str.charAt(j));
}
sb.append("\n");
}else{
stack.push(str.charAt(j)); //문자를 갖는경우
}
}
//마지막이 문자열로 끝나는경우 스택에 남아 있는 문자열을 StringBuilder에 추가한다.
while(!stack.empty())
sb.append(stack.pop());
System.out.println(sb);
}
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[Java] 백준 1912 - 연속합 (0) | 2022.06.20 |
---|---|
[Java] 백준 11053 - 가장 긴 증가하는 부분 수열 (0) | 2022.06.17 |
[Java] 백준 11726 - 2×n 타일링 (0) | 2022.06.07 |
[Java] 백준 1935 - 후위표기식2 (0) | 2022.05.24 |
[Java] 백준 1406-에디터 (2) | 2022.05.16 |