본문 바로가기
PROGRAMMING CODE/C

[BAEKJOON] No.2164 C언어

by daye_ 2021. 10. 18.

카드쌓기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