주소 : https://www.acmicpc.net/problem/2164
2164번: 카드2
N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가
www.acmicpc.net
소스 코드 :
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define MAX_QUEUE_SIZE 500001
typedef int element;
typedef struct {
element data[MAX_QUEUE_SIZE];
int front, rear;
}QueueType;
void init_queue(QueueType* q)
{
q->front = q->rear = 0;
}
int is_empty(QueueType* q)
{
return(q->front == q->rear);
}
int is_full(QueueType* q)
{
return ((q->rear + 1) % MAX_QUEUE_SIZE == q->front);
}
void enqueue(QueueType* q,element item)
{
if (is_full(q))
return;
q->rear = (q->rear + 1) % MAX_QUEUE_SIZE;
q->data[q->rear] = item;
}
element dequeue(QueueType* q)
{
if (is_empty(q))
return;
q->front = (q->front + 1) % MAX_QUEUE_SIZE;
return q->data[q->front];
}
int size(QueueType* q)
{
return (q->rear - q->front + MAX_QUEUE_SIZE) % MAX_QUEUE_SIZE;
}
int main()
{
int num = 0;
QueueType q;
init_queue(&q);
scanf("%d", &num);
for (int i = 1;i <= num;i++)
{
enqueue(&q, i);
}
while (1)
{
if (size(&q) == 1)
{
printf("1");
return 0;
}
dequeue(&q);
if (size(&q) == 1)
break;
enqueue(&q, dequeue(&q));
}
printf("%d", dequeue(&q));
return 0;
}
마무리 : C++로 풀기 전 학교 공부 할겸 C로 풀었던 문제이다. 이 문제는 큐로 풀어도 되고 원형큐로 풀어도 된다. 이 소스에소는 원형큐로 풀었던 문제이고. 문제에 나와있는 것처럼 메인 함수에서 맨 위를 빼고 그 맨위를 맨 아래로 보내게 만들었다. 만약 C++로 풀었다면 눈에 띄게 줄어들 것이다.
'백준 > C' 카테고리의 다른 글
백준 10828번 : 스택 [C] (0) | 2022.08.17 |
---|---|
백준 10773번 : 제로 [C] (0) | 2022.08.17 |
백준 1259번 : 팰린드롬수 [C] (0) | 2022.08.04 |
백준 15829번 : Hashing [C] (0) | 2022.08.03 |
백준 10250번 : ACM 호텔 [C] (0) | 2022.08.03 |