[BOJ] 10828번 스택

HyunDDeung·2022년 7월 6일
0

BOJ

목록 보기
1/12

문제

다음을 처리하는 프로그램을 작성하시오

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

풀이

스택을 활용하여 문제를 풀었습니다.
스택을 이용하여 해당되는 명령어에 맞게 실행시켜 주었습니다.

코드

#include <iostream>
#include <algorithm>
#include <stack>

using namespace std;

void init() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
}

int main() {
	init();

	// 초기 스택을 초기화 시켜준다.
	stack<int> s;
	
	// 명령어와 push가 들어왔을 때의 숫자를 입력 받을 num 변수
	string fun;
	int num;
	
	int j=0;
	int ans[10000];


	int n;
	cin >> n;

	for (int i = 0; i < n; i++) {
		cin >> fun;
		
		if (fun == "push") {	// push 명령어
			cin >> num;
			s.push(num);
		}
		if (fun == "top") {
			if (s.size() == 0)
				ans[j++] = -1;
			else
				ans[j++] = s.top();
		}
		if (fun == "pop") {		// pop 명령어
			if (s.size() == 0)
				ans[j++] = -1;

			else {
				ans[j++] = s.top();
				s.pop();
			}
		}
		if (fun == "size") {	// size 명령어
			ans[j++] = s.size();

		}
		if (fun == "empty") {	// empty 명령어
			if (s.empty())
				ans[j++] = 1;
			else
				ans[j++] = 0;
		}
	}

	for (int i = 0; i < j; i++) {	// 출력
		cout << ans[i] << endl;
	}
	return 0;
}

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

profile
감사합니다.

0개의 댓글