알고리즘

백준 17413번 단어 뒤집기2 (JAVA)

박카스마시며코딩 2023. 8. 28. 21:33

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

 

17413번: 단어 뒤집기 2

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

www.acmicpc.net

 

저는 구현을 통해 문제를 해결하였습니다.

저는 현재 태크의 부분인지 아닌지를 확인하고 태크라면 스택에 들어있는 것을 다시 뒤집어서 결과값에 넣었고, 태크가 아니라면 스택에 있는 것을 그대로 결과값에 넣어서 문제를 해결하였습니다.

 

package BOJ.etc;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Stack;

public class BOJ_17413 {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String command = br.readLine();
        Stack<Character> stack = new Stack<>();
        StringBuilder sb = new StringBuilder();
        boolean isTag = false;
        for(int i = 0 ; i < command.length() ; i ++){
            char now = command.charAt(i);
            if(!isTag && now == ' ') {
                while(!stack.isEmpty()){
                    sb.append(stack.pop());
                }
                sb.append(now);
                continue;
            }
            if(now == '<'){
                while(!stack.isEmpty()){
                    sb.append(stack.pop());
                }
                isTag = true;
                sb.append(now);
                continue;
            }
            if(now == '>'){
                StringBuilder temp = new StringBuilder();
                while(!stack.isEmpty()){
                    temp.append(stack.pop());
                }
                sb.append(temp.reverse());
                sb.append(now);
                isTag = false;
                continue;
            }
            stack.push(now);
        }
        while(!stack.isEmpty()){
            sb.append(stack.pop());
        }
        System.out.println(sb);

    }
}