알고리즘 스터디 9주차[구현]_01

백준17413번 문제

문제 : 단어 뒤집기 2



문제 설명 : 문자열을 입력받고 단어를 뒤집어 출력하는 프로그램. 이때 중요한 포인트는 < >안에 있는 내용은 그대로 출력하는 프로그램.


코드 :

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

public class Main_17413 {
    public static void main(String[] argv) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        Stack<Character> st = new Stack<>();
        boolean tf =false;

        for(int i=0;i<str.length();i++){
            if(str.charAt(i)=='<'){
                tf=true;
                while(!st.isEmpty()){
                    System.out.print(st.pop());
                }

                System.out.print(str.charAt(i));
            }
            else if(str.charAt(i)=='>'){
                tf = false;
                System.out.print(str.charAt(i));
            }
            else if(tf ==true){
                System.out.print(str.charAt(i));
            }
            else{
                if(str.charAt(i)==' '){
                    while(!st.isEmpty()){
                        System.out.print(st.pop());
                    }
                    System.out.print(str.charAt(i));
                }
                else{
                    st.push(str.charAt(i));
                }
            }
        }
        while(!st.isEmpty()){
            System.out.print(st.pop());
        }
    }
}

문제 풀이 :

본 문제는 스택을 활용하고 boolean형 변수를 설정해 풀어야 한다. 우선 문자열을 입력받아 저장한 후, for문을 통해 charat()를 하나씩 반복해나간다. 그 후 if~ else if 문을 활용한다. 처음 if문에서 '<'가 입력된다면 tf를 true로 바꾼 후 그 전까지 스택에 저장된 값을 출력하는데 스택이기 때문에 선입후출 구조이기에 역으로 출력된다. 그 후 '>'가 나오면 tf를 false로 바꾼 후 '>'를 출력한다. 이때 이 전까지는 true였으므로 true인 상태라면 그냥 for문을 돌리면서 바로바로 출력한다. 그 후 false라면 공백이 나오기 전까지 스택에 쌓았다가 다시 뒤집어 출력하고 get down 이라고 한다면, 마지막 down은 마지막 while문을 통해 스택을 출력하는 과정을 거친다.

좋은 웹페이지 즐겨찾기