※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 28278번 문제인 스택 2이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/28278
28278번: 스택 2
첫째 줄에 명령의 수 N이 주어진다. (1 ≤ N ≤ 1,000,000) 둘째 줄부터 N개 줄에 명령이 하나씩 주어진다. 출력을 요구하는 명령은 하나 이상 주어진다.
www.acmicpc.net
C++의 stl에는 <stack> 헤더가 있다. 이를 이용해 문제에서 주어진 작업들을 수행해보자.
이 문제에서 사용할 메소드는 다음과 같다:
(1) empty: 스택이 비어있는지 여부를 리턴한다. 비어있다면 true, 그렇지 않다면 false.
(2) push: 스택에 자료를 삽입한다.
(3) pop: 스택이 비어있지 않을 때, 스택에 있는 자료 중 가장 최근에 저장된 자료를 제거한다.
(4) top: 스택이 비어있지 않을 때, 스택에 있는 자료 중 가장 최근에 저장된 자료의 값을 리턴한다.
(5) size: 스택이 담고 있는 자료의 개수를 리턴한다.
(3)과 (4)는 스택이 비어있을 때 사용하면 런타임 에러가 일어나므로 사용 전에 (1)을 이용해 스택이 비어있지를 확인하는 것이 좋다.
위의 메소드들을 적절하게 활용하여 문제를 해결하자.
아래는 제출한 소스코드이다.
#include <iostream>
#include <stack>
using namespace std;
int N;
stack<int> stk;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N;
while (N--) {
int q; cin >> q;
if (q == 1) {
int X; cin >> X;
stk.push(X);
}
else if (q == 2) {
if (!stk.empty()) {
cout << stk.top() << '\n';
stk.pop();
}
else cout << -1 << '\n';
}
else if (q == 3) {
cout << stk.size() << '\n';
}
else if (q == 4) {
cout << stk.empty() << '\n';
}
else {
if (!stk.empty()) cout << stk.top() << '\n';
else cout << -1 << '\n';
}
}
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 16168 // C++] 퍼레이드 (0) | 2023.08.06 |
---|---|
[BOJ 16167 // C++] A Great Way (0) | 2023.08.05 |
[BOJ 16166 // C++] 서울의 지하철 (0) | 2023.08.04 |
[BOJ 25577 // C++] 열 정렬정렬 정 (0) | 2023.08.03 |
[BOJ 16169 // C++] 수행 시간 (0) | 2023.08.02 |