본문 바로가기

백준

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

문제

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

 

17413번: 단어 뒤집기 2

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

www.acmicpc.net

코드

package com.company;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.Stack;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        String s = br.readLine();
        Stack<Character> stack = new Stack<>();

        boolean check = false;

        for (int i = 0; i < s.length(); i++) {
            if(s.charAt(i) == '<'){
                check = true;
                while(!stack.empty()){
                    sb.append(stack.pop());
                }
                sb.append(s.charAt(i));
            }

            else if(s.charAt(i) == '>'){
                check = false;
                sb.append(s.charAt(i));
            }

            else if(check){
                sb.append(s.charAt(i));
            }

            else if(!check){
                if(s.charAt(i) == ' '){
                    while(!stack.empty()){
                        sb.append(stack.pop());
                    }
                    sb.append(s.charAt(i));
                }

                else {
                    stack.push(s.charAt(i));
                }
            }
        }

        while(!stack.empty()){
            sb.append(stack.pop());
        }

        System.out.println(sb.toString());
    }

}

풀이

문제에 대한 감은 잡았으나 스택에 대해서 생각하는 것을 깜빡하여 헤맸는 문제이다. 자른 문자열을 기준으로 문자열의 길이에 대해 추적할 필요 없이 스택에 넣고 빼면서 출력하거나 혹은 그냥 읽자마자 출력하면 되는 문제였다.

풀이의 흐름은 다음과 같다. 먼저 현재 위치가 ‘<’ 나 ’>’안에 있는지 없는지 확인하는 변수를 통해 똑바로 출력할지 아니면 스택에 넣을지 확인해준다. ‘<’나 ’>’의 안에 있는 경우는 바로 바로 출력을 해주고 밖에 있는 경우는 스택에 문자를 넣어준다. 이때 공백을 만날 경우 스택에 있는 문자를 전부 출력하고 마지막으로 현재위치이기도 한 공백을 출력해준다. 그리고 밖에 있고 문자열을 입력받는 경우에는 스택에 넣어준다.

'백준' 카테고리의 다른 글

백준 2615 오목 (JAVA)  (0) 2022.08.04
백준 22858 원상 복구(small) (JAVA)  (0) 2022.07.26
백준 20291 파일 정리(JAVA)  (0) 2022.07.18
백준 20436 ZOAC 3 (JAVA)  (0) 2022.07.15
백준 10994 별찍기 - 19 (JAVA)  (0) 2022.07.14