카드쌓기2
(헤더파일 분할)
+ 좀 더 자세한 출력으로 바꾸었음
input : 10 0(0을 입력하면 종료)
output : Discarded cards : 1, 3, 5, 7, 9, 2, 6, 10, 8 (버려진 순서대로 출력)
Remaiming card : 4 (남아있는카드, 백준에서 요구하는 답)
#main.c
#include "queueADT.h"
void main() {
int i=0, e = 0,descheck=1;
int arr[20] = { 0, };
while (1) {
scanf("%d", &arr[i]);
if (arr[i] == 0) break;
i++;
}
for (int j = 0; j < i; j++) {
Queue Que;
Queue_init(&Que);
for (int k = 0; k < arr[j]; k++) {
enqueue(&Que, k + 1);
}
printf("Discarded cards: ");
while (!is_empty(&Que)) {
e = dequeue(&Que);
if(descheck<arr[j]) printf("%d", e);
if (descheck < arr[j] - 1)printf(", ");
descheck++;
if (is_empty(&Que)) break;
e = dequeue(&Que);
enqueue(&Que, e);
}
printf("\n");
printf("Remaining card: %d\n", e);
descheck = 1;
}
return 0;
}
#queueADT.h
#pragma once
#include <stdio.h>
#pragma warning (disable:4996)
#define SIZE 51 //백준기준 500001
typedef struct {
int queue[SIZE];
int front, rear;
}Queue;
void Queue_init(Queue*q);
int is_full(Queue*q);
int is_empty(Queue*q);
void enqueue(Queue*q, int e);
int dequeue(Queue*q);
#queueADT.c
#include "queueADT.h"
void Queue_init(Queue*q) {
q->front = q->rear = 0;
}
int is_empty(Queue*q) {
return (q->front == q->rear);
}
int is_full(Queue*q) {
return ((q->rear + 1) % SIZE == q->front);
}
void enqueue(Queue*q, int e) {
if (is_full(q)) return;
q->rear = (q->rear + 1) % SIZE;
q->queue[q->rear] = e;
}
int dequeue(Queue*q) {
if (is_empty(q)) return -1;
q->front = (q->front + 1) % SIZE;
return q->queue[q->front];
}
'PROGRAMMING CODE > C' 카테고리의 다른 글
[BAEKJOON] No.10430 C언어 (0) | 2021.10.18 |
---|---|
[BAEKJOON] No.10172 C언어 (0) | 2021.10.18 |
[BAEKJOON] No.10171 C언어 (0) | 2021.10.15 |
[BAEKJOON] No.9498 C언어 (0) | 2021.10.15 |
[BAEKJOON] No.8393 C언어 (0) | 2021.10.15 |