스택

이윤설·2024년 3월 27일

제출코드


import java.io.*;
import java.util.*;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        List<String> list = new ArrayList<>();
        Stack<Integer> stack = new Stack<>();

        int repeat = Integer.parseInt(br.readLine());
        for (int i = 0; i < repeat; i++) {
            String input = br.readLine();
            list.add(input);
        }

        for (String str : list) {
            function(str, stack);
        }
    }

    static void function(String str, Stack<Integer> stack) {
        if (str.contains("push")) {
            String[] splitList = str.split(" ");
            int number = Integer.parseInt(splitList[1]);
            push(number, stack);
        }
        if (str.equals("pop")) {
            pop(stack);
        }
        if (str.equals("size")) {
            size(stack);
        }
        if (str.equals("empty")) {
            empty(stack);
        }
        if (str.equals("top")) {
            top(stack);
        }
    }

    static void push(int n, Stack<Integer> stack) {
        stack.push(n);
    }

    static void pop(Stack<Integer> stack) {
        if (stack.size() == 0) {
            System.out.println(-1);
        } else {
            int peekNumber = stack.peek();
            System.out.println(peekNumber);
            stack.pop();
        }
    }

    static void size(Stack<Integer> stack) {
        int size = stack.size();
        System.out.println(size);
    }

    static void empty(Stack<Integer> stack) {
        if (stack.empty()) {
            System.out.println(1);
        } else {
            System.out.println(0);
        }
    }

    static void top(Stack<Integer> stack) {
        if (stack.empty()) {
            System.out.println(-1);
        } else {
            System.out.println(stack.peek());
        }
    }
}

모범답안

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
 
public class Main {
 
	public static int[] stack;
	public static int size = 0;
 
 
	public static void main(String[] args) throws IOException {
 
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		
		
		StringTokenizer st;
		
		int N = Integer.parseInt(br.readLine());
 
		stack = new int[N];
		
		while (N-- > 0) {
			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);
	}
 
	public static void push(int item) {
		stack[size] = item;
		size++;
	}
	
	public static int pop() {
		if(size == 0) {
			return -1;
		}
		else {
			int res = stack[size - 1];
			stack[size - 1] = 0;
			size--;
			return res;
		}
	}
	
	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];
		}
	}
	
}

배운점

  1. stack은 실행속도가 배열보다 느리다.
    굳이 스택을 사용하지 않아도 되면 리스트를 사용해도 괜찮다.
  2. if-else보다 switch-case의 실행속도가 더 빠르다.
profile
화려한 외면이 아닌 단단한 내면

0개의 댓글