스택
문제 설명
정수를 저장하는 스택을 구현하고 주어진 명령어를 처리하여 나오는 결과를 한 줄 씩 출력한다. 첫 줄에 명령어 실행 횟수를 입력받는다.
명령어는 다음과 같다.
- push X: 정수 X를 스택에 넣는 연산이다.
- pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 스택에 들어있는 정수의 개수를 출력한다.
- empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
- top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
알고리즘
테스트 케이스 수 만큼 명령어를 읽어 들이고 실행한다.
#include <stdio.h>
#include <iostream>
#include <string>
#include <algorithm>
#include <stack>
using namespace std;
int main()
{
int num = 0;
cin >> num;
stack<int> s;
while (num)
{
string function;
cin >> function;
if (function.find("push") != string::npos)//stack에 넣기
{
int n;
cin >> n;
s.push(n);
}
else if (function.find("pop")!=string::npos)
{
if (s.empty())//비었으면 -1 출력
cout << -1 << "\n";
else//비어있지 않으면 값 출력
{
cout << s.top() << "\n";
s.pop();
}
}
else if (function.find("size") != string::npos)//크기 출력
{
cout << s.size() << "\n";
}
else if (function.find("empty") != string::npos)//비어있는 지 여부
{
if (s.empty())
cout << 1 << "\n";
else
cout << 0 << "\n";
}
else if (function.find("top") != string::npos)//top 실행
{
if (s.empty())//비었으면 -1 출력
cout << -1 << "\n";
else//비어있지 않으면 값 출력
{
cout << s.top() << "\n";
}
}
num--;
}
return 0;
}
고찰
stack구현이라서 stl 사용 여부가 제한 될 줄 알았는데 그냥 사용해도 되서 사용했다.
vector를 사용해서 만들면 될 것 같다.
'Algorithm' 카테고리의 다른 글
[백준 11866] 요세푸스 문제0 (0) | 2021.07.28 |
---|---|
[백준 1003] 피보나치 함수 (0) | 2021.07.28 |
[백준 10845] 큐 (0) | 2021.07.28 |
[백준 11659] 좌표 정렬하기 (0) | 2021.07.28 |
[백준 10866] 덱 (0) | 2021.07.28 |