https://www.acmicpc.net/problem/1158
1158번: 요세푸스 문제
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)
www.acmicpc.net
문제를 풀긴 풀었는데 제출이 안된다. 뭐가 문제가 있다는건데 진짜로 모르겠다..
질문게시판에 올려놔야겠다... 나중에 다시 도전하기로...
#include <stdio.h>
typedef struct _que {
int data[5001];
int begin;
int end;
}Que;
void Qinit(Que* q);
void push(Que* q, int data);
void pop(Que* q);
int front(Que* q);
int main()
{
Que q;
Qinit(&q);
int N, K,i,j;
scanf("%d %d", &N, &K);
for (i = 0;i < N;i++)
{
push(&q, i + 1);
}
printf("<");
for (i = 0; i < N - 1;i++) {
for (j = 0;j < K - 1;j++) {
push(&q, front(&q));
pop(&q);
}
printf("%d,", front(&q));
pop(&q);
}
printf("%d>\n",front(&q));
return 0;
}
void Qinit(Que* q)
{
q->begin = 0;
q->end = 0;
}
void push(Que* q, int data)
{
q->data[q->end] = data;
q->end += 1;
}
void pop(Que* q)
{
if ((q->begin) == (q->end))
{
printf("-1\n");
}
else
{
q->begin += 1;
}
}
int front(Que* q)
{
return q->data[q->begin];
}