정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 다섯 가지이다.
- push X: 정수 X를 스택에 넣는 연산이다.
- pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 스택에 들어있는 정수의 개수를 출력한다.
- empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
- top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
스택을 구현하는데 있어 시간을 최소로 하는 방법은 const 상수 MAX를 지정하여
배열을 생성하고 , 배열의 size로 사용할 변수를 지정하여 그 변수를 증가시키고 감소시키며 배열에 값을 저장해 가는 방식이지만, 뭔가 벡터 연습을 하고 싶었으므로 정답 유무와 관계 없이 벡터를 사용하여 문제를 풀어보았다.
벡터의 라이브러리 함수중 stack과 같은 기능의 함수들이 있다는걸 알았음.
pop_back()은 가장 끝에 원소만 삭제해 주는 기능.
쉬운 문제였다.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector v;
int main(void)
{
string ins;
int N;
cin>>N;
for(int i=0; i<N; i++)
{
cin>>ins;
if(ins == "push")
{
int x;
cin>>x;
v.push_back(x);
}
else if(ins == "top")
{
int size = v.size()-1;
if(!v.empty())
{
cout<<v[size]<<endl;
}
else{
cout<<-1<<endl;
}
}
else if(ins == "empty")
{
if(v.empty()){
cout<<1<<endl;
}
else{
cout<<0<<endl;
}
}
else if(ins == "size")
{
cout<<v.size()<<endl;
}
else if(ins =="pop"){
if(v.empty()){cout<<-1;
}
else{
int size = v.size()-1;
v.pop_back();
cout<<v[size]<<endl;
'Algorithm' 카테고리의 다른 글
백준 2562번 최대값 (0) | 2019.07.02 |
---|---|
백준 1100번 하얀칸 (0) | 2019.07.01 |
백준 10821번 정수의 개수 (0) | 2019.07.01 |
백준 10866번 덱 (0) | 2019.07.01 |
백준 10845번 큐 (0) | 2019.06.30 |