학사 나부랭이
백준 2164 - 큐 구현 본문
#include <iostream>
using namespace std;
class queue {
int* data, * top, * bot, datanum, qnum;
public:
queue();
int pop();
void push(int ndata);
int front();
int size();
~queue();
};
queue::queue() {
data = new int[10];
top = data;
bot = data;
datanum = 0;
qnum = 10;
}
queue::~queue() {
delete[] data;
}
int queue::pop() {
if (top < bot) {
int tmp = *top;
datanum--;
top++;
return tmp;
}
else return -1;
}
void queue::push(int ndata) {
if (bot < &data[qnum - 1]) { //아래 for문 간편화를 위해 한 칸은 남겨둠
*bot = ndata;
bot++;
datanum++;
}
else { //bot 포인터가 qnum - 1 번째 칸을 넘었을 때, 즉, datanum < qnum 일 수도 있음
int* tmpdata, tmpidx = 0;
tmpdata = new int[datanum + 10]; //현재 데이터 수 + 10만큼 만듦
for (int i = 0; i < qnum; i++) {
if (&data[i] == top) tmpidx = i; //pop으로 인해 있을 수 있는 빈 칸 거름
tmpdata[i - tmpidx] = data[i];
}
delete[] data;
data = tmpdata;
top = &data[0];
bot = &data[datanum]; //새로 만들어진 data는 0번부터 datanum번까지 빈 칸 없음
qnum = datanum + 10;
*bot = ndata; //여기부터 푸시작업
bot++;
datanum++;
}
}
int queue::front() {
return *top;
}
int queue::size() {
return datanum;
}
int main() {
cin.tie(NULL);
int n, * arr, tmp, top, bot;
bool chk = true;
cin >> n;
queue q;
for (int i = 1; i <= n; i++) q.push(i);
while (1) {
if (chk) {
q.pop();
chk = false;
}
else {
tmp = q.front();
q.pop();
q.push(tmp);
chk = true;
}
if (q.size() == 1) break;
}
cout << q.front();
}
이렇게 다 짜서 해도 시간 초과 걸려서 결국 queue 헤더 사용함ㅠㅠ
'塵箱 > 코드 삽질' 카테고리의 다른 글
백준 15829 - 모듈러 연산 (0) | 2021.04.20 |
---|---|
백준 10866 - 덱 (0) | 2021.04.19 |
백준 1494 - 다이나믹 프로그래밍, 이진 탐색 (0) | 2021.04.17 |
Floyd algorithm (0) | 2021.04.16 |
Strassen function (0) | 2021.04.04 |
Comments