728x90
반응형
https://www.acmicpc.net/problem/10866
자료구조 중 덱을 구현하는 문제이다.
나는 그냥 무식하게 조건의 2배 이상 크기의 배열을 잡고 그 중간부터 head와 tail을 이용하여 deque를 구현했다.
굳이 그럴 필요 없이 C++의 stl인 deque를 사용해서 풀어도 되는 문제이다.
신경 써줄점은 명령을 제대로 받아서 구분해서 작업을 처리하는 부분이다.
나는 명령어가 몇 개 안되기 때문에 그냥 문자열의 일부분을 보고 구분하는 방법을 사용했다.
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int deque[30000], head=15000, tail=15000;
int main() {
int N;
scanf("%d",&N);
memset(deque, -1, 30000*sizeof(int));
while(N--) {
int num;
char str[100];
scanf("%s",str);
if(str[0]=='p' && str[1]=='u') {
if(str[5]=='f') { // push_front
scanf("%d",&num);
deque[--head]=num;
}
else { // push_back
scanf("%d",&num);
deque[tail++]=num;
}
}
else if(str[0]=='p' && str[1]=='o') {
if(str[4]=='f') { // pop_front
if(head==tail) {
printf("-1\n");
}
else {
printf("%d\n",deque[head++]);
}
}
else { // pop_back
if(head==tail) {
printf("-1\n");
}
else {
printf("%d\n",deque[--tail]);
}
}
}
else if(str[0]=='s') { // size
printf("%d\n",tail-head);
}
else if(str[0]=='e') { // empty
if(head==tail) {
printf("1\n");
}
else {
printf("0\n");
}
}
else if(str[0]=='f') { // front
if(head==tail) {
printf("-1\n");
}
else {
printf("%d\n",deque[head]);
}
}
else { // back
if(head==tail) {
printf("-1\n");
}
else {
printf("%d\n",deque[tail-1]);
}
}
}
return 0;
}
728x90
반응형
'PS(Problem Solving) > 백준(BOJ)' 카테고리의 다른 글
[백준][5430번][C/C++] AC (0) | 2020.12.19 |
---|---|
[백준][1021번][C/C++] 회전하는 큐 (0) | 2020.12.17 |
[백준][9345번][C] 디지털 비디오 디스크(DVDs) (0) | 2020.11.22 |
[백준][1759번][C++] 암호 만들기 (0) | 2020.11.22 |
[백준][10815번][C++] 숫자 카드 (0) | 2020.11.22 |