🎯 Coding Test

[백준] 10828 스택 (배열, LinkedList로 구현해보기)

연_우리 2022. 2. 10. 23:20
반응형

 

https://www.acmicpc.net/problem/10828

 

10828번: 스택

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

 

 

문제풀이

package baekjoon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.StringTokenizer;

interface Stack{
    void push(int n);
    int pop();
    int size();
    int empty();
    int top();
}

//배열로 stack 구현
class ArrayStack implements Stack{
    int[] store;
    int index = 0;

    //초기값이 필요하다
    public ArrayStack(int storeLength) {
        store = new int[storeLength];
    }

    @Override
    public void push(int n){
        store[index] = n;
        index++;
    }

    @Override
    public int pop(){
        int result = top();
        if(size()>0){
            store[index-1] = 0;
            index--;
        }
        return result;
    }

    @Override
    public int size(){
        return index;
    }

    @Override
    public int empty(){
        if(this.size() == 0){
            return 1;
        }
        return 0;
    }

    @Override
    public int top(){
        if(this.size() == 0){
            return -1;
        }
        return store[index-1];
    }
}

//LinkedList로 Stack구현
class LinkedStack implements Stack{
    LinkedList<Integer> store = new LinkedList<Integer>();

    @Override
    public void push(int n) {
        store.add(n);
    }

    @Override
    public int pop() {
        int result = top();
        if(size() >= 1){
            store.removeLast();
        }
        return result;
    }

    @Override
    public int size() {
        return store.size();
    }

    @Override
    public int empty() {
        if(size() == 0){
            return 1;
        }
        return 0;
    }

    @Override
    public int top() {
        if(size() == 0){
            return -1;
        }
        return store.getLast();
    }
}



public class Main {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int commandCount = Integer.parseInt(br.readLine());
        ArrayStack stack = new ArrayStack(commandCount);
        //LinkedStack stack = new LinkedStack();

        for (int i = 0; i < commandCount; i++) {
            String command = br.readLine();
            int num = 0;

            if(command.contains(" ")){
                StringTokenizer st = new StringTokenizer(command, " ");
                command = st.nextToken();
                num = Integer.parseInt(st.nextToken());
            }

            switch(command){
                case "push" :
                    stack.push(num); break;
                case "pop" :
                    System.out.println(stack.pop()); break;
                case "size" :
                    System.out.println(stack.size()); break;
                case "empty" :
                    System.out.println(stack.empty()); break;
                case "top" :
                    System.out.println(stack.top()); break;
            }
        }

    }
}

 

반응형
  • 네이버 블러그 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 구글 플러스 공유하기
  • 카카오톡 공유하기