<< 문제>>
https://www.acmicpc.net/problem/28279
간단하게 Deck을 구현하는 문제
입력이 1,000,000개 주어진다고 해서 앞 뒤 여유 1,000,000개 씩 넣어 2,000,001개 리스트로 구성했습니다.
시작점을 1,000,000 으로 두어 head와 last가 앞뒤로 이동하면서 동작하도록 구현했습니다.
<< 코드 >>
#include <iostream>
using namespace std;
class myDeck {
private:
int list[2000001];
int head = 1000000;
int last = 1000000;
public:
void pushFront(int num) {
head--;
list[head] = num;
}
void pushBack(int num) {
list[last] = num;
last++;
}
int popFront() {
if (empty())
return -1;
int result = list[head];
head++;
return result;
}
int popBack() {
if (empty())
return -1;
int result = list[last - 1];
last--;
return result;
}
int size() { return last - head; }
bool empty() {
if (head == last) {
return true;
} else {
return false;
}
}
int front() {
if (empty())
return -1;
return list[head];
}
int back() {
if (empty())
return -1;
return list[last - 1];
}
};
void deckAction(myDeck &d, int input) {
switch (input) {
int temp;
case 1:
cin >> temp;
d.pushFront(temp);
break;
case 2:
cin >> temp;
d.pushBack(temp);
break;
case 3:
cout << d.popFront() << '\n';
break;
case 4:
cout << d.popBack() << '\n';
break;
case 5:
cout << d.size() << '\n';
break;
case 6:
cout << d.empty() << '\n';
break;
case 7:
cout << d.front() << '\n';
break;
case 8:
cout << d.back() << '\n';
break;
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin >> n;
myDeck d;
int input;
for (int i = 0; i < n; i++) {
cin >> input;
deckAction(d, input);
}
}
< 백준 BaekJoon : 24511번 queuestack> C++ (0) | 2024.01.23 |
---|---|
< 백준 BaekJoon : 2346번 풍선 터뜨리기> C++ (0) | 2024.01.23 |
< 백준 BaekJoon : 11866번 요세푸스 문제 0> C++ (0) | 2024.01.23 |
< 백준 BaekJoon : 2164번 카드 2> C++ (0) | 2024.01.23 |
< 백준 BaekJoon : 18258번 큐 2> C++ (0) | 2024.01.23 |
댓글 영역