본문 바로가기
PS 문제 풀이/Baekjoon

[BOJ] 백준 10828 스택

by 까망 하르방 2021. 7. 22.
반응형

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

Approach

Stack 구현하는 문제이다.

 

[스택] Stack 이란?

Stack 이란? 스택 (Stack) 특징을 가장 잘 나타내는 표현은 후입선출(Last In First Out, LIFO) 이다. ▶ 스택(Stack)은 삽입(push)과 삭제(pop)이 한쪽 끝에서만 일어나는 구조 가장 상단에 위치한 원소를 가리.

zoosso.tistory.com

 

문제 조건이 어렵지 않기 때문에 자료구조만 구현해서 해결할 수 있다.

- push X: 정수 X를 스택에 넣는 연산

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

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

- size: 스택에 들어있는 정수 개수 출력

- empty: 스택이 비어있으면 1, 아니면 0 출력

- top: 스택의 가장 위에 있는 정수 출력

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

 

 [C++] [STL] Stack  

 

[C++] [STL] Stack

Stack 기본 연산 - LIFO 구조 (Last In First Out) - push(element) : 스택 (뒤쪽에) 원소 추가 - pop() : 스택에 (뒤쪽에) 있는 원소 삭제 (반환 x) - top() : 스택에서 끝에 있는 원소 반환 - empty() : 스택이..

zoosso.tistory.com


#include <iostream>
#include <stack>
#include <cstring>

using namespace std;

stack<int> st;

int main(void)
{
    // freopen("input.txt", "r", stdin);
    int N, val; scanf("%d", &N);
    
    for (int i = 0; i < N; i++)
    {
        char cmd[10]; scanf("%s", cmd);
        if (!strcmp(cmd, "push"))
        {
            scanf("%d", &val);
            st.push(val);
        }
        else if (!strcmp(cmd, "pop"))
        {
            if (!st.empty())
            {
                printf("%d\n", st.top());
                st.pop();
            }
            else
            {
                printf("-1\n");
            }
                
        }
        else if (!strcmp(cmd, "size"))
        {
            printf("%d\n", st.size());
        }
        else if (!strcmp(cmd, "empty"))
        {
            printf("%d\n", st.empty());
        }
        else if (!strcmp(cmd, "top"))
        {
            if (!st.empty())
            {
                printf("%d\n", st.top());
            }
            else
            {
                printf("-1\n");
            }   
        }
    }
}

 

Java

import java.util.Arrays;
import java.util.Scanner;

class Stack{
	int top;
	int[] stack;
	
	public Stack(int size) {
		top = -1;
		stack = new int[size];
	}
	
	// 정수 x를 스택에 넣는 연산
	public void push(int x) {
		stack[++top] = x;
	}
	
	// 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력
	// 만약 스택에 들어있는 정수가 없는 경우 -1 출력
	public int pop() {
		if(top == -1) {
			return -1;
		}
		return stack[top--];
	}
	
	// 스택에 들어있는 정수의 개수를 출력한다.
	public int size() {
		return (top+1);
	}

	// 스택이 비어있으면 1, 아니면 0을 출력
	public int empty() {
		if(top == -1) {
			return 1;
		}
		return 0;
	}
	
	// 스택의 가장 위에 있는 정수를 출력한다.
	// 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
	public int peek() {
		if(top == -1) {
			return -1;
		}	
		return stack[top];
	}
}

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int n = Integer.parseInt(sc.nextLine());
		int[] result = new int[n];
		int idx = -1;
		Stack st = new Stack(n);
		
		int temp;
		for(int i = 0; i < n; i++) {
			String[] str = sc.nextLine().split(" "); 
			if(str[0].equals("push")){
				int x = Integer.parseInt(str[1]);
				st.push(x);
			}
			else if(str[0].equals("pop")){
				result[++idx] = st.pop();
			}
			else if(str[0].equals("top")){
				result[++idx] = st.peek();
			}
			else if(str[0].equals("size")){
				result[++idx] = st.size();
			}
			else if(str[0].equals("empty")){
				result[++idx] = st.empty();
			}
		}
		
		for(int i=0; i <= idx; i++) {
			System.out.println(result[i]);
		}
	}

}
반응형

'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글

[BOJ] 백준 18258 큐 2  (0) 2021.07.22
[BOJ] 백준 10845 큐  (0) 2021.07.22
[BOJ] 백준 2869 달팽이는 올라가고 싶다.  (0) 2021.07.21
[BOJ] 백준 10773 제로  (0) 2021.07.21
[BOJ] 백준 1712 손익분기점  (0) 2021.07.05

댓글