Problem Solving/Java
백준 17413 단어 뒤집기2 문제 풀이 Stack 활용 ( Java )
TakeKnowledge
2019. 10. 19. 11:33
반응형
17413번: 단어 뒤집기 2
문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져 있다. 문자열의 시작과 끝은 공백이 아니다. '<'와 '>'가 문자열에 있는 경우 번갈아가면서 등장하며, '<'이 먼저 등장한다. 또, 두 문자의 개수는 같다. 태그는 '<'로 시작해서 '>'로 끝나는 길이가 3 이상인 부분 문자
www.acmicpc.net
|
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;
public class Main {
private static void printStack(BufferedWriter bw, Stack<Character> stack) throws IOException {
// 스택에 쌓인 단어를 모두 출력하는 함수. 여러번 필요해서 함수로 분리
while (!stack.isEmpty()) {
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// 문자열이 주어진다.
// 이는 < 로 시작해서 단어 혹윽 공백이 적혀있고 >로 끝나는 태그와 단어로 구성되어있다.
// 태그는 뒤집지 말고 단어만 뒤집어라.
String s = br.readLine();
// Line 입력 받고 s 에 저장
boolean tag = false;
// tag 안인지 밖인지 확인할 flag 생성
Stack<Character> stack = new Stack<Character>();
// 단어들 뒤집을 Stack 생성
for (int i = 0; i < s.length(); i++) {
// 단어를 처음부터 끝까지 검사
if (s.charAt(i) == '<') {
// 태그 시작일 때
tag = true;
// tag 안인지 확인하는 flag를 true로 바꾸고
printStack(bw,stack);
// 그동안 stack에 쌓인 단어들을 스택이 빌 때 까지 비워준다
bw.write(s.charAt(i));
// 태그 출력
} else if (s.charAt(i) == '>') {
// 태그 종료일 때
tag = false;
// tag 안인지 확인하는 flag를 false로 바꾸고
bw.write(s.charAt(i));
// 그 단어 그대로 출력
} else if (tag) {
// 태그 안일 경우
bw.write(s.charAt(i));
// 그 단어 그대로 출력
} else {
// 태그 바깥일 경우
if(s.charAt(i)==' ') {
//공백이면
printStack(bw,stack);
// 그동안 stack에 쌓인 단어들을 스택이 빌 때 까지 비워준다
bw.write(s.charAt(i));
// 공백 출력
}else {
//공백이 아니면
stack.push(s.charAt(i));
// stack에 넣어준다
}
}
}
// 반복이 끝나고 마지막일 경우
printStack(bw,stack);
// 그동안 stack에 쌓인 단어들을 스택이 빌 때 까지 비워준다
// BufferedWriter 비움
// reader, writer 종료
}
}
|
처음엔 split 해서 stack과 queue를 번갈아 활용하는 방식으로 접근했다가
결국 Stack만 활용해서 해결하는 방식으로 풀었다
반응형