[백준] 10828 스택 (C++)

조혜정·2021년 8월 17일
1

백준알고리즘

목록 보기
10/20
post-thumbnail

백준 10828 스택 문제
백준 10828 스택 소스코드

📄 문제 설명

Problem

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

명령은 총 다섯 가지이다.

- push X: 정수 X를 스택에 넣는 연산
- pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력
      (만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력)
- size: 스택에 들어있는 정수의 개수를 출력
- empty: 스택이 비어있으면 1, 아니면 0을 출력
- top: 스택의 가장 위에 있는 정수를 출력
      (만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력)

Input

첫째 줄 : 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)
다음 N개 줄 : 명령과 필요시에 정수
            (주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다.)

Output

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

Example Input 1

14
push 1
push 2
top
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
top

Example Output 1

2
2
0
2
1
-1
0
1
-1
0
3

Example Input 2

7
pop
top
push 123
top
pop
top
pop

Example Output 2

-1
-1
123
123
-1
-1

📝 문제 해설

▶ Stack (스택)
한쪽에서만 데이터를 넣고 뺄 수 있는 자료구조.
LIFO (Last In First Out) 구조 : 가장 마지막에 들어온 데이터가 가장 먼저 나간다.
Stack Reference
이 문제는 간단하게 STL Stack을 사용해 해결하면 된다.
pop()과 top() 명령 수행시 stack이 비었는지 확인해주는 절차만 추가하면
쉽게 문제를 해결할 수 있다.

</> Source Code

#include <bits/stdc++.h>

using namespace std;

int main() {

	stack<int> st;

	int n;
	scanf("%d", &n);

	for (int i = 0; i < n; i++) {
		string s;
		cin >> s;

		if (s == "push") {
			int x;
			scanf("%d", &x);
			st.push(x);
		}
		else if (s == "pop") {
			int top = -1;
			if (!st.empty()) {
				top = st.top();
				st.pop();
			}
			printf("%d\n", top);
		}
		else if (s == "size") {
			printf("%d\n", st.size());
		}
		else if (s == "empty") {
			int empty = 0;
			if (st.empty()) {
				empty = 1;
			}
			printf("%d\n", empty);
		}
		else if (s == "top") {
			int top = -1;
			if (!st.empty()) {
				top = st.top();
			}
			printf("%d\n", top);
		}
       
	}
	return 0;
}
profile
ʜʏᴇᴘᴘʏ ᴅᴇᴠ

0개의 댓글