백준 온라인 저지/Silver

[BOJ] 17413 - 단어 뒤집기 2

jooona 2021. 2. 20. 14:12
반응형

개인적인 풀이일 뿐, 최적의 정답이 아님을 알려드립니다.

 

문제

www.acmicpc.net/problem/17413

 

17413번: 단어 뒤집기 2

문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져

www.acmicpc.net

난이도: 실버 3

사용언어: JAVA

 

풀이

이 문제는 '<', '>', 그리고 공백에 대한 예외처리만 잘해주면 쉽게 해결할 수 있습니다. 저는 스택을 이용해 문자열을 뒤집고 출력했습니다.

 

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
36
37
38
39
import java.io.*;
import java.util.Stack;
 
class Main {
 
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 
        Stack<Character> st = new Stack<>();
        String s = br.readLine();
        int i;
        for (i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '<') { // '<'인 경우, 앞의 문자열을 뒤집어 출력해주고,
                while (st.size() != 0) {
                    bw.write(st.pop());
                }
                while (s.charAt(i) != '>') { // '<'이 나올때 까지 그냥 출력
                    bw.write(s.charAt(i));
                    i++;
                }
                bw.write(s.charAt(i));
            } else if (s.charAt(i) == ' ') { // ' '인 경우, 앞까지의 문자열을 뒤집어 출력해주고
                while (st.size() != 0) {
                   bw.write(st.pop()); // 모두 출력했으면 공백 출력
                }
                bw.write(s.charAt(i));
            } else {
                st.push(s.charAt(i));
            }
        }
 
        while (st.size() != 0) { // 마지막 문자열 출력
            bw.write(st.pop());
        }
 
        bw.flush();
    }
}
cs

 

반응형

'백준 온라인 저지 > Silver' 카테고리의 다른 글

[BOJ] 3986 - 좋은 단어  (0) 2021.02.24
[BOJ] 11399 - ATM  (0) 2021.02.23
[BOJ] 2491 - 수열  (0) 2021.02.20
[BOJ] 15988 - 1, 2, 3 더하기 3  (0) 2021.02.20
[BOJ] 11659 - 구간 합 구하기 4  (0) 2021.02.18