접근 아이디어
< >안에 있는 단어를 그렇지 않은 단어와 다르게 처리해야 한다.
그러나 언제 < >가 나올지 모르는게 문제다!
그래서 “>”를 기준으로 문장을 나누면 < > 문자열의 위치에 규칙이 생긴다.
만약 < >가 있으면 항상 뒤 쪽에 있다는 것!
필요한 문법
이번엔 라벨을 사용해서 루프를 빠져 나왔다.
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); } }
|