728x90
SMALL
백준 문제 풀이: 10828 [스택]
문제 링크: https://www.acmicpc.net/problem/10828
문제 설명:
정수를 저장하는 스택을 구현하고, 주어진 명령을 처리하는 문제입니다. 스택에 대해 다음 명령을 처리합니다:
push X
: 정수 X를 스택에 넣습니다.pop
: 스택에서 가장 위에 있는 정수를 제거하고 출력합니다. 스택이 비어있으면 -1을 출력합니다.size
: 스택에 들어있는 정수의 개수를 출력합니다.empty
: 스택이 비어있으면 1, 아니면 0을 출력합니다.top
: 스택의 가장 위에 있는 정수를 출력합니다. 스택이 비어있으면 -1을 출력합니다.
문제 해결 코드
#include <iostream>
#include <stack>
using namespace std;
stack s;
int main() {
int n;
cin >> n;
string a;
int k;
for (int i = 0; i < n; i++) {
cin >> a;
if (a == "push") {
cin >> k;
s.push(k);
} else if (a == "top") {
if (s.empty()) {
cout << -1 << endl;
} else {
cout << s.top() << endl;
}
} else if (a == "size") {
cout << s.size() << endl;
} else if (a == "empty") {
cout << (s.empty() ? 1 : 0) << endl;
} else if (a == "pop") {
if (s.empty()) {
cout << -1 << endl;
} else {
cout << s.top() << endl;
s.pop();
}
}
}
return 0;
}
코드 설명
- 핵심 알고리즘: C++ STL의
stack
을 사용하여 스택의 기본 동작을 구현합니다. - 구현 세부사항:
- 스택에 정수를 추가하거나 제거하는
push
와pop
동작을 구현합니다. - 스택의 크기와 비어있는지 여부를
size
와empty
명령으로 확인합니다. top
명령으로 스택의 맨 위 값을 확인합니다.- 조건에 따라 스택이 비어 있을 경우 -1을 출력합니다.
- 스택에 정수를 추가하거나 제거하는
- 시간 복잡도: 모든 명령이 O(1)의 시간 복잡도로 처리됩니다.
결과
스택의 기본 명령을 구현하고, 문제에서 주어진 동작에 맞게 처리합니다. C++의 stack
을 사용하여 효율적으로 해결했습니다. 다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!
728x90
LIST
'BAEKJOON > 자료 구조' 카테고리의 다른 글
백준 11866번 [요세푸스 문제 0](C++)-yes6686- 티스토리 (0) | 2024.01.05 |
---|---|
백준 10845번 [큐](C++)-yes6686- 티스토리 (0) | 2024.01.05 |
백준 10816번 [숫자 카드 2](C++)-yes6686- 티스토리 (0) | 2024.01.03 |
백준 10773번 [제로](C++)-yes6686- 티스토리 (0) | 2024.01.03 |
백준 9012번 [괄호](C++)-yes6686- 티스토리 (0) | 2024.01.03 |