학사 나부랭이

백준 2164 - 큐 구현 본문

塵箱/코드 삽질

백준 2164 - 큐 구현

태양왕 해킹 (14세) 2021. 4. 16. 02:34
#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