[Baekjoon 17413번] 문자열 뒤집기2 문제 (with 자바)

반응형
728x90
반응형

문제 17413번 - 문자열 뒤집기2 문제

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

 

17413번: 단어 뒤집기 2

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

www.acmicpc.net

 

 

 

 

 

풀이

package seohae.algorithm.level1;

import java.io.*;
import java.util.*;

/**
 * https://www.acmicpc.net/problem/17413
 */
public class Problem_007_17413 {
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);

        Stack<Character> stack = new Stack<Character>();

        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        String input = sc.nextLine();

        input += " "; /* 마지막 단어도 걸리도록 추가 */

        boolean isStart = false; /* '<' '>' 사이에 존재 여부 */
        for (char ch : input.toCharArray()) {
            if (ch == '<') {
                /* 그 전에 push 된 데이터는 pop() */
                while (!stack.isEmpty()) {
                    bw.write(stack.pop());
                }

                bw.write(ch);
                isStart = true; /* '<', '>' 존재여부 true */
            } else if ( ch == '>') { /* '<', '>' 사이 종료 */
                bw.write(ch);
                isStart = false; /* '<', '>' 존재여부 false */
            } else if (isStart) { /* '<', '>' 사이의 문자열은 그대로 출력 */
                bw.write(ch);
            } else { /* !isStart 일 경우 (뒤집어야할 문자열) */
                if (ch == ' ' || ch == '\n') { /* 단어 끝 */
                    while (!stack.isEmpty()) { /* 단어가 들어가있을 stack 을 pop() */
                        bw.write(stack.pop());
                    }

                    bw.write(ch); // 공백
                } else { /* push */
                    stack.push(ch);
                }
            }
        }

        bw.flush();
    }
}

 

반응형

Designed by JB FACTORY