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