알고리즘/백준

백준 9093번 단어 뒤집기 자바 Java (☆공부 226일차)

김발자~ 2023. 3. 13. 21:36
반응형

9093 단어 뒤집기

https://www.acmicpc.net/problem/9093

 

9093번: 단어 뒤집기

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는

www.acmicpc.net

 

 

 

 


백준 9093번 문제 단어 뒤집기


문제


 

시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
1 초 128 MB 29542 15465 11593 53.169%

문제

문장이 주어졌을 때, 단어를 모두 뒤집어서 출력하는 프로그램을 작성하시오. 단, 단어의 순서는 바꿀 수 없다. 단어는 영어 알파벳으로만 이루어져 있다.

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는 공백이 하나 있다.

출력

각 테스트 케이스에 대해서, 입력으로 주어진 문장의 단어를 모두 뒤집어 출력한다.

예제 입력 1

2
I am happy today
We want to win the first prize

예제 출력 1

I ma yppah yadot
eW tnaw ot niw eht tsrif ezirp

 

 

 


과정 생각해보기


 

https://gimbalja.tistory.com/150

 

백준 9093번 단어 뒤집기 자바 Java

9093 단어 뒤집기 https://www.acmicpc.net/problem/9093 9093번: 단어 뒤집기 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길

gimbalja.tistory.com

4달 전에 풀었던 문제

 

단어를 뒤집는다는 거에서 FILO인 스택으로 풀어야겠다고 연상할 수 있다
 
이 문제에서 핵심이라고 한다면 각 테스트 케이스마다 문장을 받을 떄 그 문장에 "\n"을 붙여 줄바꿈 표시를 준다는 점
1
String str = br.readLine() + "\n";
cs

 

이 외엔 코드를 보면 쉽게 이해할 수 있을 것이다

 

 

 


정답 인정 코드


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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();
        Stack<Character> stack = new Stack<>();
        
        int t = Integer.parseInt(br.readLine());
        
        for(int i = 0; i < t; i++) {
            String str = br.readLine() + "\n";    // ★: +"\n"
            for(int j = 0; j < str.length(); j++) {
                if(str.charAt(j) == ' ' || str.charAt(j) == '\n') {
                    while(!stack.isEmpty()) {
                        sb.append(stack.pop());
                    }
                    sb.append(' ');
//                    sb.append(str.charAt(j));    //  ★: 이 줄 추가하면 24, 30 필요없음
                }else {
                    stack.push(str.charAt(j));
                }
            }
            sb.append("\n");
        }
        
        System.out.println(sb);
    }
 
}
 
cs

23번 주석에 적어놨듯이 공백과 줄바꿈을 한 번에 해결할 수도 있다

 

 

 


이번에 제출한 건 StringBuilder, 이전엔 BufferedWriter를 이용하여 출력했다이 문제에선 BufferedWriter가 더 빠르다

 

반응형