본문 바로가기

개발(합니다)/알고리즘&코테

알고리즘 단계별로 풀어보기 : BOJ-10828(스택)

반응형

문제(출처)

정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.


명령은 총 다섯 가지이다.


push X: 정수 X를 스택에 넣는 연산이다.

pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 

만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.

size: 스택에 들어있는 정수의 개수를 출력한다.

empty: 스택이 비어있으면 1, 아니면 0을 출력한다.

top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.


입력

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 

둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 

주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 

문제에 나와있지 않은 명령이 주어지는 경우는 없다.


출력

출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.


예제 입력

14

push 1

push 2

top

size

empty

pop

pop

pop

size

empty

pop

push 3

empty

top


예제 출력

2

2

0

2

1

-1

0

1

-1

0

3



내 풀이

package date_20190124;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

class MyStack {
    private Node node;
    private int size;

    public MyStack() {
    }

    class Node {
        private int value;
        private Node nextNode;

        public Node() {
            this.value = -1;
            this.nextNode = null;
        }

        public Node(int value) {
            this.value = value;
            this.nextNode = null;
        }
    }

    public void push(int value) {
        Node newNode = new Node(value);
        if (this.node == null) {
            this.node = newNode;
        } else {
            Node temp = this.node;
            newNode.nextNode = temp;
            this.node = newNode;
        }
        this.size++;
    }

    public int pop() {
        if (this.node == null) {
            this.size = 0;
            return -1;
        } else {
            Node temp = this.node;
            this.node = temp.nextNode;
            this.size--;
            return temp.value;
        }
    }

    public int size() {
        return this.size;
    }

    public int empty() {
        if (this.node == null) {
            return 1;
        } else {
            return 0;
        }
    }

    public int top() {
        if (this.node == null) {
            return -1;
        } else {
            return this.node.value;
        }
    }

}


public class BOJ_10828 {
    // 스택의 5가지 기능을 구현
    // push x : 정수 x 저장
    // pop : 가장 위의 정수를 뺴고 없으면 -1 출력
    // size : 정수의 개수를 출력
    // empty : 비어 있으면 1, 아니면 0
    // top : 가장 위에 있는 정수 출력, 없으면 -1
    
    public static void main(String args[]) throws NumberFormatException, IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int num = Integer.parseInt(br.readLine());

        MyStack s = new MyStack();
        String[] str = new String[num];
        int[] result = new int[num];
        for (int i = 0; i < num; i++) {
            str = br.readLine().split(" ");
            result[i] = caseCall(str, s);
        }
        for(int i : result) {
            if(i != -2) {
                bw.write(String.valueOf(i));
                bw.newLine();
            }
        }
        bw.close();
        
    }

    public static int caseCall(String[] str, MyStack s) {

        int result = 0;
        switch (str[0]) {
        case "push": {
            s.push(Integer.parseInt(str[1]));
            result = -2;
            break;
        }
        case "pop": {
            result = s.pop();
            break;
        }
        case "size": {
            result = s.size();
            break;
        }
        case "empty": {
            result = s.empty();
            break;
        }
        case "top": {
            result = s.top();
            break;
        }
        default: {
            result = -2;
            break;
        }
        }

        return result;
    }

}



내 풀이 해석

기본적인 스택을 만들었습니다.

아쉬운 점

출력해야 하는 내용만 출력해야 하는 조건을 간단히 -2가 아니면 출력하라고 했습니다.


반응형