※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 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

+ Recent posts