본문 바로가기

백준/Data Structures

백준 10828 자바

반응형

 

스택의 기본적인 문제입니다.

1. Stack을 이용한 직접적인 풀이

2. 배열을 이용한 풀이

두 가지로 풀어보았습니다.

 

반복문을 if else if로 쓰시는 분들도 있는데 이렇게 문자열이 있을 경우에는 switch문이 더 깔끔해 보입니다. (주관적 의견)

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));

        Stack<Integer> stack = new Stack<>();
        StringBuilder sb = new StringBuilder();
        int N = Integer.parseInt(br.readLine());

        while (N-- > 0) {
            StringTokenizer st = new StringTokenizer(br.readLine());

            String s = st.nextToken();

            switch (s) {

                case "push":
                    stack.push(Integer.parseInt(st.nextToken()));
                    break;

                case "pop":
                    if(stack.isEmpty()) {
                        sb.append(-1).append('\n');
                        break;
                    } else {
                        sb.append(stack.pop()).append('\n');
                        break;
                    }
                case "size":
                    sb.append(stack.size()).append('\n');
                    break;

                case "empty":
                    if(stack.isEmpty()) {
                        sb.append(1).append('\n');
                        break;
                    } else {
                        sb.append(0).append('\n');
                        break;
                    }

                case "top" :
                    if(stack.isEmpty()) {
                        sb.append(-1).append('\n');
                        break;
                    } else {
                        sb.append(stack.peek()).append('\n');
                        break;
                    }
            }

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

 

2. 배열을 이용해서 각각의 메서드를 정의해서 푸는 방식입니다.

import java.io.*;
import java.util.*;
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));

        StringTokenizer st;
        StringBuilder sb = new StringBuilder();
        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 K) {
        stack[size] = K;
        size++;
    }
    public static int pop() {
        if(size == 0) {
            return -1;
        }
        else {
            int result = stack[size -1];
            stack[size - 1] = 0;
            size--;
            return result;
        }
    }
    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];
        }
    }
}

 

반응형

'백준 > Data Structures' 카테고리의 다른 글

백준 17608 자바  (0) 2022.08.23
백준 2161 자바  (0) 2022.08.22
백준 4949 자바  (0) 2022.08.22
백준 9012 자바  (0) 2022.08.22
백준 10845 자바  (0) 2022.08.19