BOJ/C++ [BOJ] 1158. 요세푸스 문제 (C) IamToday 2020. 3. 24. 00:34 *큐 구현 연습을 위해 C로 품. #include <stdio.h> #include <stdlib.h> #include <string.h> //큐 구현하기 #define MAXX 5001 struct Queue { int num[MAXX]; int front, back; }; int isEmpty(struct Queue *q) { if (q->back == q->front) return 1; return 0; } int isFull(struct Queue *q) { int tmp = (q->back+1)%MAXX; if (tmp == q->front) { //back+1 을 MAXX로 나눈 값이 front와 같으면 //가득 차 있다. return 1; } return 0; } void push(struct Queue *q, int data) { if (isFull(q)) { //꽉 차있음 return; } else { q->back = (q->back+1)%MAXX; q->num[q->back] = data; } } int pop(struct Queue *q) { if(isEmpty(q)) { //비어있음 return -1; } else { // int ret= q->num[q->front]; // q->num[q->front] = NULL; // memmove(q->num, q->num+1, sizeof(q->num)-sizeof(int)); // q->back--; q->front = (q->front+1)%MAXX; return q->num[q->front]; } } int main() { int n, k; scanf("%d %d", &n, &k); struct Queue *q = (struct Queue*)malloc(sizeof(struct Queue)); q->front = q->back = -1; for (int i = 1; i <= n; i++) { push(q, i); } printf("<"); int idx = 0; while(idx < n) { //큐에 원소가 하나도 없을 때까지 반복 for (int i = 1; i <= k; i++) { //일단 k번을 출력 if (i == k) { ++idx; if (idx == n) { printf("%d", pop(q)); } else printf("%d, ", pop(q)); } else push(q, pop(q)); } } printf(">"); return 0; }