문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다.
먼저, 문자열 S는 아래와과 같은 규칙을 지킨다.
a
'-'z
'), 숫자('0
'-'9
'), 공백(' `'), 특수 문자('
<', '
>`')로만 이루어져 있다.<
'와 '>
'가 문자열에 있는 경우 번갈아가면서 등장하며, '<
'이 먼저 등장한다. 또, 두 문자의 개수는 같다.태그는 '<
'로 시작해서 '>
'로 끝나는 길이가 3 이상인 부분 문자열이고, '<
'와 '>
' 사이에는 알파벳 소문자와 공백만 있다. 단어는 알파벳 소문자와 숫자로 이루어진 부분 문자열이고, 연속하는 두 단어는 공백 하나로 구분한다. 태그는 단어가 아니며, 태그와 단어 사이에는 공백이 없다.
첫째 줄에 문자열 S가 주어진다. S의 길이는 100,000 이하이다.
입력 | 출력 |
---|---|
baekjoon online judge | noojkeab enilno egduj |
tag | gat |
ef gh | fe hg |
one1 two2 three3 4fourr 5five 6six | 1eno 2owt 3eerht rruof4 evif5 xis6 |
21474836479223372036854775807 | 74638474127085774586302733229 |
17413problem ever | 31471melborp reve |
< space >space space space< spa c e> | < space >ecaps ecaps ecaps< spa c e> |
tag가 있으면 그냥 출력하고
tag가 없으면 stack에서 뽑음
import java.io.*;
import java.util.Stack;
public class three17413 {
public void solution() throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder builder = new StringBuilder();
String input = reader.readLine();
Stack<Character> stack = new Stack<>();
boolean isTag = false;
for (int i = 0; i < input.length(); i++) {
char current = input.charAt(i);
if (current == '<') {
while (!stack.isEmpty()) {
builder.append(stack.pop());
}
builder.append(current);
isTag = true;
continue;
} else if (current == '>') {
builder.append(current);
isTag = false;
continue;
} else if (current == ' ') {
while (!stack.isEmpty()) {
builder.append(stack.pop());
}
builder.append(current);
continue;
}
if (isTag) builder.append(current);
else {
stack.push(current);
}
}
while (!stack.isEmpty()) {
builder.append(stack.pop());
}
writer.write(builder.toString());
writer.flush();
}
public static void main(String[] args) throws IOException {
new three17413().solution();
}
}