[백준] 2164번 카드2 (= card2) - 재우스 프로그래밍 (C 언어)
2021. 2. 4. 18:25ㆍ백준
문제 링크 :www.acmicpc.net/problem/2164
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define DEBUG 1
#define MAX_QUEUE_SIZE 999999
//최대 카드 500000 + 최대 카드에서 push 횟수 499998 + 큐에서 full과 empty를 구분하기 위한 공간 + 1
typedef struct _queue {
int mem[MAX_QUEUE_SIZE];
int Front;
int Back;
} queue;
bool empty(queue *);
void pop(queue *);
void push(queue *, int);
size_t size(queue *);
int front(queue *);
int back(queue *);
void initQueue(queue *);
int main(void)
{
int N = 0; //카드의 장수
int temp = 0;
queue *qu = (queue *)malloc(sizeof(queue));
initQueue(qu);
scanf("%d", &N);
for (int i = 1; i <= N; i++) {
push(qu, i);
}
while ((int)size(qu) > 1) {
pop(qu);
if ((int)size(qu) > 1) {
temp = front(qu);
pop(qu);
push(qu, temp);
}
else {
break;
}
}
printf("%d\n", back(qu));
free(qu);
return 0;
}
bool empty(queue *qu)
{
if (qu->Front == qu->Back) { return true; }
else { return false; }
}
void pop(queue *qu)
{
qu->Front++;
qu->mem[qu->Front] = 0;
return;
}
void push(queue *qu, int data)
{
qu->Back++;
qu->mem[qu->Back] = data;
return;
}
size_t size(queue *qu) { return (size_t)(qu->Back - qu->Front); }
int front(queue *qu) { return qu->mem[qu->Front + 1]; }
int back(queue *qu) { return qu->mem[qu->Back]; }
void initQueue(queue *qu)
{
for (int i = 0; i < MAX_QUEUE_SIZE; i++) {
qu->mem[i] = 0;
}
qu->Front = -1;
qu->Back = -1;
return;
}
'백준' 카테고리의 다른 글
[백준] 2468번 안전 영역 (= safe area) - 재우스 프로그래밍 (C 언어) (0) | 2021.02.06 |
---|---|
[백준] 11866번 요세푸스 문제0 (= josephus problem0) - 재우스 프로그래밍 (C 언어) (0) | 2021.02.05 |
[백준] 5639번 이진 검색 트리 (= binary search tree) - 재우스 프로그래밍 (C 언어) (0) | 2021.02.03 |
[백준] 2156번 포도주 시식 (= wine tasting) - 재우스 프로그래밍 (C 언어) (0) | 2021.02.03 |
[백준] 2493번 탑 (= tower) - 재우스 프로그래밍 (C 언어) (0) | 2021.02.01 |