25. 백준 17413번 단어 뒤집기2

접근 아이디어

< >안에 있는 단어를 그렇지 않은 단어와 다르게 처리해야 한다.
그러나 언제 < >가 나올지 모르는게 문제다!
그래서 “>”를 기준으로 문장을 나누면 < > 문자열의 위치에 규칙이 생긴다.
만약 < >가 있으면 항상 뒤 쪽에 있다는 것!

필요한 문법

이번엔 라벨을 사용해서 루프를 빠져 나왔다.

1
2
3
4
5
6
outerLable:
for (int i = 0; i<arr.length ; i++){
char c = arr[i];
switch(c){
case '<':
break outerLable;

코드

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
import java.util.*;
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bf.readLine(),">",true);
Stack<Character> stk = new Stack<>();
StringBuilder sb = new StringBuilder();

while(st.hasMoreTokens()){
char[] arr = st.nextToken().toCharArray();
int tmp = 0;
outerLable:
for (int i = 0; i<arr.length ; i++){
char c = arr[i];
switch(c){
case '<':
break outerLable;
case ' ':
while(stk.size()!=0)
sb.append(stk.pop());
sb.append(' ');
break;
default:
stk.push(c);
break;
}
tmp++;
}
while(stk.size()!=0)
sb.append(stk.pop());
for (int i = tmp; i<arr.length ; i++)
sb.append(arr[i]);
}
System.out.println(sb);
}
}
Share