17413번: 단어 뒤집기 2

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

www.acmicpc.net

[문제 간단설명]

<>안에 있는 내용은 그대로 출력하고,

그 밖에 내용은 공백을 기준으로 거꾸로 뒤집어서 출력해야한다.

 

 

[풀이]

<>태그의 내용은 Queue의 특징을,

그 밖의 내용은 Stack의 특징을 이용했다.

해본결과 LinkedList안에는 기호가 들어갈 수 없다.

그래서 '<' , '>' 는 링크드리스트 안에 넣지않고 바로 출력해줬다. 

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import java.io.*;
import java.util.*;
public class Main {
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        Stack<Character> stk = new Stack();
        LinkedList<Character> lik = new LinkedList<>();
 
        boolean q = false;
        boolean s = true;
 
        String str = sc.nextLine();
        for(int i =0; i < str.length(); i++){
                char tmp = str.charAt(i);
 
                if(tmp == '<') {
                    q = true;
                    s = false;
                    while(!stk.isEmpty()){
                        bw.write(stk.pop());
                    }
                    bw.write("<");
                }
                else if(tmp == '>'){
                    q = false;
                    s = true;
                    while(!lik.isEmpty()){
                        bw.write(lik.poll());
                    }
                    bw.write(">");
                    continue;
                }
                else if(s && (!stk.isEmpty() && tmp ==' ')){
                    while(!stk.isEmpty())
                        bw.write(stk.pop());
 
                    if(i != str.length()-1)
                        bw.write(" ");
                    continue;
                }
                else if(q){
                    lik.add(tmp);
                }
                else if(s){
                    stk.add(tmp);
                }
 
        }
        while(!stk.isEmpty()){
            bw.write(stk.pop());
        }
        bw.flush();
        bw.close();
    }
}
cs

'알고리즘 > 백준' 카테고리의 다른 글

백준 17298 오큰수 자바[java]  (0) 2023.01.04
백준 10799 쇠막대기 자바[java]  (0) 2023.01.03
백준 10866 덱 자바[java]  (0) 2023.01.02
백준 1158 요세푸스 자바[java]  (0) 2023.01.02
백준 10845 큐 자바[java]  (0) 2023.01.01

+ Recent posts