코딩테스트/BOJ

[BOJ] 17413 단어뒤집기 2 - JAVA

5월._. 2022. 2. 25.
728x90

1. 문제

https://www.acmicpc.net/problem/17413

 

17413번: 단어 뒤집기 2

문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져

www.acmicpc.net

태그는 그대로 출력한다.

공백도 그대로 출력한다.

숫자 등 단어는 모두 반대로 출력한다. 


2. 풀이

  1. 일반 문자들은 모두 stack에 집어넣는다.
  2. ' '를 만나면 문자열을 모두 pop시켜서 StringBuilder에 더한다.
  3. '<'를 만나면 문자열을 모두 pop시켜서 StringBuilder에 더한다. 그리고 '>'를 만날때까지 그대로 문자열을 더한다.
  4. 반복이 모두 끝나면 stack에 남아있는 문자들을 모두 pop시켜서 더한다.
import java.io.*;
import java.util.*;

public class BOJ_17413_단어뒤집기2 {
   public static void main(String[] args) throws IOException {
      String S = new BufferedReader(new InputStreamReader(System.in)).readLine();
      Stack<Character> stack = new Stack<>();
      StringBuilder sb = new StringBuilder();
      for (int i = 0; i < S.length(); i++) {
         if (S.charAt(i) == '<') {
            while (!stack.isEmpty()) sb.append(stack.pop());
            while (S.charAt(i) != '>') sb.append(S.charAt(i++));
            sb.append('>');
         } else if (S.charAt(i) == ' ') {
            while (!stack.isEmpty()) sb.append(stack.pop());
            sb.append(' ');
         } else {
            stack.push(S.charAt(i));
         }
      }
      while (!stack.isEmpty()) sb.append(stack.pop());
      System.out.println(sb);
   }
}

3. 결과

'코딩테스트 > BOJ' 카테고리의 다른 글

[BOJ] 1753 최단경로 - JAVA  (0) 2022.02.25
[BOJ] 17144 미세먼지 안녕! - JAVA  (0) 2022.02.25
[BOJ] 1697 숨바꼭질 - JAVA  (0) 2022.02.25
[BOJ] 7569 토마토 - JAVA  (0) 2022.02.24
[BOJ] 7576 토마토 - JAVA  (0) 2022.02.24

댓글