백준(BaekJoon) 10828번: 스택

lhh2020·2021년 12월 11일
0

백준 문제풀이

목록 보기
1/1

해결방법

  1. 스택 클래스를 구현한다
  2. 명령을 입력받는 코드를 만든다

소스코드

스택은 LinkedList로 구현할 것이다.
어차피 맨 위 값을 제외하고는 사용되지 않을것이기 때문이다.

각 정보를 저장할 노드를 만들어준다.

class Node
{
    private Node before; // 이전 노드 가르킴
    private int num;

    public Node(Node before, int num)
    {
        this.before = before;
        this.num = num;
    }
    public int getNum()
    {
        return num;
    }
    public Node getBefore()
    {
        return before;
    }
}

그다음 노드를 저장하고 기능을 수행할 Stack 클래스를 만들어준다

class Stack
{
    private Node node = null;
    private int size = 0;

    public void push(int value)
    {
        if(node == null)
        {
            node = new Node(null, value);
        }
        else
        {
            Node n = new Node(node, value);
            node = n;
        }
        size++;
    }
    public int pop()
    {
        int value = -1;
        if(node == null) return -1;
        value = node.getNum();
        node = node.getBefore();
        size--;
        return value;
    }
    public int size()
    {
        return size;
    }
    public boolean empty()
    {
        if(node == null) return true;
        return false;
    }
    public int top()
    {
        if(node == null) return -1;
        return node.getNum();
    }
}

그다음 나머지 정보를 받아올 부분을 만든다

public void run()
    {
        int size = Integer.parseInt(readline());
        for(int i = 0; i < size; i++)
        {
            String str = readline();
            switch (str.charAt(0))
            {
                case 'p':
                    if(str.charAt(1) == 'u')
                    {
                        int num = Integer.parseInt(str.substring(5, str.length()));
                        stack.push(num);
                        continue;
                    }
                    if(str.charAt(1) == 'o')
                    {
                        print(stack.pop());
                    }
                    continue;
                case 's':
                    print(stack.size());
                    continue;
                case 'e':
                    print(stack.empty() ? 1 : 0);
                    continue;
                case 't':
                    print(stack.top());
                    continue;
            }
        }
    }

전체 소스코드

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

class Node
{
    private Node before;
    private int num;

    public Node(Node before, int num)
    {
        this.before = before;
        this.num = num;
    }
    public int getNum()
    {
        return num;
    }
    public Node getBefore()
    {
        return before;
    }
}
class Stack
{
    private Node node = null;
    private int size = 0;

    public void push(int value)
    {
        if(node == null)
        {
            node = new Node(null, value);
        }
        else
        {
            Node n = new Node(node, value);
            node = n;
        }
        size++;
    }
    public int pop()
    {
        int value = -1;
        if(node == null) return -1;
        value = node.getNum();
        node = node.getBefore();
        size--;
        return value;
    }
    public int size()
    {
        return size;
    }
    public boolean empty()
    {
        if(node == null) return true;
        return false;
    }
    public int top()
    {
        if(node == null) return -1;
        return node.getNum();
    }
}

public class Main
{
    private BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    private Stack stack = new Stack();
    public void run()
    {
        int size = Integer.parseInt(readline());
        for(int i = 0; i < size; i++)
        {
            String str = readline();
            switch (str.charAt(0))
            {
                case 'p':
                    if(str.charAt(1) == 'u')
                    {
                        int num = Integer.parseInt(str.substring(5, str.length()));
                        stack.push(num);
                        continue;
                    }
                    if(str.charAt(1) == 'o')
                    {
                        print(stack.pop());
                    }
                    continue;
                case 's':
                    print(stack.size());
                    continue;
                case 'e':
                    print(stack.empty() ? 1 : 0);
                    continue;
                case 't':
                    print(stack.top());
                    continue;
            }
        }
    }
    public String readline()
    {
        try {
            return br.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    public static void print(long num)
    {
        System.out.println(num);
    }
    public static void print(String str)
    {
        System.out.println(str);
    }


    public static void main(String[] args) { new Main().run();}
}

0개의 댓글