stack에 대해 입력되는 명령 번호에 맞게 결과를 출력하는 문제이다.
1 X: 정수 X를 스택에 넣는다. (1 ≤ X ≤ 100,000)
2: 스택에 정수가 있다면 맨 위의 정수를 빼고 출력한다. 없다면 -1을 대신 출력한다.
3: 스택에 들어있는 정수의 개수를 출력한다.
4: 스택이 비어있으면 1, 아니면 0을 출력한다.
5: 스택에 정수가 있다면 맨 위의 정수를 출력한다. 없다면 -1을 대신 출력한다.
직접 구현하기도 한다는데 그냥 stl의 stack을 써보기로 한다.
프링글스통처럼 LIFO 방식이다.
젤 나중에 들어간 과자를 젤 처음 먹는다.
다 꺼내놓고 먹는다면 다른 얘길 수 있다.
push
, pop
, top
, size
, empty
이렇게 다섯 개 기능을 주로 사용한다.
문제 고대로 풀면 풀린다.
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);