[C++] 백준 28278. 스택 2

멋진감자·2024년 12월 2일
1

알고리즘

목록 보기
25/64
post-thumbnail

문제

stack에 대해 입력되는 명령 번호에 맞게 결과를 출력하는 문제이다.

1 X: 정수 X를 스택에 넣는다. (1 ≤ X ≤ 100,000)
2: 스택에 정수가 있다면 맨 위의 정수를 빼고 출력한다. 없다면 -1을 대신 출력한다.
3: 스택에 들어있는 정수의 개수를 출력한다.
4: 스택이 비어있으면 1, 아니면 0을 출력한다.
5: 스택에 정수가 있다면 맨 위의 정수를 출력한다. 없다면 -1을 대신 출력한다.

stack

직접 구현하기도 한다는데 그냥 stl의 stack을 써보기로 한다.
프링글스통처럼 LIFO 방식이다.
젤 나중에 들어간 과자를 젤 처음 먹는다.
다 꺼내놓고 먹는다면 다른 얘길 수 있다.

push, pop, top, size, empty 이렇게 다섯 개 기능을 주로 사용한다.

  • push(): 데이터 집어넣기
  • pop(): 젤 위에 있는 데이터 뽑기
  • top(): 젤 위에 있는 데이터 출력
  • size(): 크기 출력
  • empty(): 비어있으면 1, 아니면 0 출력

풀이

문제 고대로 풀면 풀린다.
2번과 5번이 거의 비슷해서 같은 조건문으로 받은 뒤
다른 부분만 예외로 처리해줬다.

코드

#include <iostream>
#include <stack>
using namespace std;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);

	int t;
	cin >> t;

	int order;
	stack<int> s;
	for (int i = 0; i < t; i++) {
		cin >> order;
		if (order == 1) {
			int num;
			cin >> num;
			s.push(num);
		}
		else if (order == 2 || order == 5) {
			if (s.empty()) cout << "-1\n";
			else {
				cout << s.top() << "\n";
				if (order == 2) s.pop();
			}
		}
		else if (order == 3) {
			cout << s.size() << "\n";
		}
		else {
			cout << s.empty() << "\n";
		}
	}

	return 0;
}

채점

시간 초과 직빵 코드

ios::sync_with_stdio
cin.tie(0);
cout.tie(0);

profile
난멋져

0개의 댓글