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 |