[백준 BOJ] 10866번 덱 (C++/cpp)

2022. 2. 9. 17:38PS (Program Solving)/BOJ (백준)

문제 설명

https://www.acmicpc.net/problem/10866

 

10866번: 덱

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

백준 BOJ 10866번 덱 문제 사진
백준 BOJ 10866번 덱 문제 사진2

 

접근 방법 - 덱을 이용한 기본 문제

백준의 10866번 문제는 자료 구조 중 덱을 이용한 기본적인 문제이다.

해당 문제는 덱 구조에서 실행 가능한 행위를 모두 갖춘 프로그램을 만들어야 하는 문제이다.

이전에 스택 문제와 큐 문제에 관련하여 작성한 글이 있다. 아래에 링크를 기재해놓으니, 생소하다면 참고해보는 것도 좋을 것이다.

https://smary-it.tistory.com/78

 

[백준 BOJ] 10828번 스택 (C++/cpp)

문제 설명 https://www.acmicpc.net/problem/10828 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크..

smary-it.tistory.com

https://smary-it.tistory.com/79

 

[백준 BOJ] 10845번 큐 (C++/cpp)

문제 설명 https://www.acmicpc.net/problem/10845 10845번: 큐 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거..

smary-it.tistory.com

C++에는 위처럼 deque 라이브러리가 따로 존재해서, 필자는 이번에도 이를 이용해 문제를 해결하였다.

필자는 아래처럼 코드를 작성하여 문제를 해결하였다.

덱 구조에 대해 알고 있는 상태라면 쉽게 풀 수 있지만, 그렇지 않다면 아래의 코드를 참고해보길 바란다.

 

후기

이 문제도 deque 라이브러리를 이용하면 아주 쉽게 풀 수 있는 문제이다.

하지만 위 링크의 문제처럼, 덱 구조에 대해 공부하는 데에 있어선 직접 구현하여 문제를 해결하는 것이 더 올바르다.

따라서, 필자는 덱에 대해 추가적으로 공부를 한 뒤, 다음에는 라이브러리 없이 덱 구조를 직접 구현하여 해당 문제를 다시 풀어보고자 한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <string>
#include <deque>
using namespace std;

//백준 10866번 코드
int main() {
	deque<int> d;
	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		string ch;	int num;
		cin >> ch;
		if (ch == "push_front") {
			cin >> num;
			d.push_front(num);
		}
		else if (ch == "push_back") {
			cin >> num;
			d.push_back(num);
		}
		else if (ch=="pop_front") {
			if (!d.empty()) { 
				cout << d.front() << endl;
				d.pop_front(); 
			}
			else { cout << -1 << endl; }
		}
		else if (ch == "pop_back") {
			if (!d.empty()) { 
				cout << d.back() << endl;
				d.pop_back(); 
			}
			else { cout << -1 << endl; }
		}
		else if(ch=="size"){
			cout << d.size() << endl;
		}
		else if (ch == "empty") {
			if (d.empty()) { cout << 1 << endl; }
			else { cout << 0 << endl; }
		}
		else if (ch == "front") {
			if (!d.empty()) { cout << d.front() << endl; }
			else { cout << -1 << endl; }
		}
		else if (ch == "back") {
			if (!d.empty()) { cout << d.back() << endl; }
			else { cout << -1 << endl; }
		}
	}
}

 

제출 결과

백준 BOJ 10866번 덱 문제 C++ 제출 결과

(2022.01.10 백준 10866번 문제 제출 결과)

반응형