アルゴリズム学習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()を1つずつ繰り返します.その後if~else if文を使用します.if文に「<」が初めて入力された場合、tfをtrueに変更し、スタックに格納された値をその前に出力します.これはスタックです.そのため、先入後出構造であり、逆出力になります.その後「>」が表示され、tfをfalseに変換して「>」が出力されます.その前はtrueなので、trueならそのままforゲートを回して直接出力します.falseの場合、空白が表示される前にスタックにスタックし、get downと呼ばれる出力を反転すると、最後のdownは最後のwhile文でスタックを出力します.