[Baekjoon]10828号(SILVER IV):スタック(Java)


1. Problem 📃
[スタック]
https://www.acmicpc.net/problem/10828
[質問]
整数を格納するスタックを実装し、入力としてのコマンドを処理するプログラムを作成します.
命令は全部で5種類ある.
  • push X:整数Xをスタックに入れる演算.
  • pop:スタックの最上位の整数を除去し、出力します.スタックに整数がない場合は、-1が出力されます.
  • size:出力スタック内の整数の個数.
  • empty:スタックが空の場合、1または0が出力されます.
  • top:出力スタックの一番上の整数.スタックに整数がない場合は、-1が出力されます.
  • 2. Input ⌨️
    [入力]
    1行目に与えられるコマンド数N(1≦N≦10000).
    2行目からN行目までそれぞれ1つのコマンドがあります.
    与えられた整数は1以上であり、100000以下である.
    問題にない命令はない.
    3. Output 🖨
    [出力]
    出力するコマンドが発行されるたびに、各行に1つのコマンドが出力されます.
    4. Example 📚
    [IO例]
    例入力例出力14 push 1 push 2 topsizem ptypopsizem ptypopush 3 emptypopush 2201-101-1037 poptopush 123 topopopopopopopopopop p p-1-123-11-1
    5. Solution 🔑
    問題に示すように,push,pop,size,menull,topを方法として問題を実現し,解決する.
    1.静的表示寸法を管理する変数(size)と値の配列変数(stack)を宣言します.
    2.pushは入力値をスタックに入れるコマンドです.
    配列変数スタックに値を配置し、挿入するインデックスがsize値に配置されます.
    その後sizeを++に増やします.
    3.popはスタックから値を減算するコマンドです.
    popの配列スタックに値がない場合(size=0)、-1を返します.
    値がある場合は、stackのsize-1値を変数(n)に配置し、stackのsize-1値を0(任意の値)に変更します.次にsize--(減少)をnに戻します.
    4.sizeはスタックの長さを表すコマンドです.
    変数size値をそのまま返してください.
    5.空はスタックに値があるかどうかを判断するコマンドです.
    変数size値が0(空)の場合、1を返します.そうでない場合、0を返します.
    6.topは、スタックの上部の値を出力するコマンドです.
    配列スタックに値がない場合(size==0)、-1を返します.そうでない場合、スタック内のsize-1インデックスの値を返します.
    7.マスターメソッドは、変数(N)を宣言することによって数回の文を入力します.
    すべてのコマンドがpushの場合、値はNになります.したがって、静的に宣言されたstack配列変数はNに指定されます.
    8.次に、Nのコマンドを受信すると、switch文を使用して該当する値を呼び出す方法を使用し、StringBuilde(sb)に戻り値を入れて開きます.最終的なStringBuilder(sb)をN回出力します.
    6. Code 💻
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.StringTokenizer;
    
    public class Main {
    	
    	static int size = 0;
    	static int[] stack;
    	
    	public static void push(int val) {
    		stack[size] = val;
    		size++;
    	}	
    	public static int pop() {
    		if(size == 0) {
    			return -1;
    		}
    		else {
    			int n = stack[size-1];
    			stack[size-1] = 0;
    			size--;
    			return n;
    		}
    	}
    	public static int size() {
    		return size;
    	}
    	public static int empty() {
    		if(size == 0 ) {
    			return 1;
    		}
    		else {
    			return 0;
    		}
    	}
    	public static int top() {
    		if(size == 0) {
    			return -1;
    		}
    		else {
    			return stack[size - 1];
    		}
    	}
    	
    	
    	public static void main(String[] args) throws IOException {
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		StringTokenizer st = new StringTokenizer(br.readLine());
    		StringBuilder sb = new StringBuilder();
    		
    		int N = Integer.parseInt(st.nextToken());
    		
    		stack = new int[N];
    		for(int i=0; i<N; i++) {
    			
    			st = new StringTokenizer(br.readLine(), " ");
    			
    			switch(st.nextToken()) {
    			case "push" :
    				push(Integer.parseInt(st.nextToken()));
    				break;
    			case "pop" :
    				sb.append(pop()).append("\n");
    				break;
    			case "size" :
    				sb.append(size()).append("\n");
    				break;
    			case "empty" :
    				sb.append(empty()).append("\n");
    				break;
    			case "top" :
    				sb.append(top()).append("\n");
    				break;
    			}
    		}
    		System.out.println(sb);
    	}
    
    }