프로그래밍 알고리즘

[정올 3101] 요세푸스 문제1

꾸준한사람 2023. 1. 9. 06:58
반응형

http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&code=3101 

 

JUNGOL

 

www.jungol.co.kr

#include <stdio.h>

struct Node {
	Node* pPrev;
	Node* pNext;
	int my;
	Node(int n) : pPrev(this), pNext(this), my(n) {}
	Node(Node* pp, Node* pn, int n) : pPrev(pp), pNext(pn), my(n) { pp->pNext = this; pn->pPrev = this; }
};
int N, K;
Node* pFirst;

void Input()
{
	scanf("%d %d", &N, &K);
	Node* pN = pFirst = new Node(1);
	for (int i = 2; i <= N; i++)
	{
		pN = new Node(pN, pN->pNext, i);
	}
}

Node* pop()
{
	int n = K;
	while (--n) { pFirst = pFirst->pNext; }
	return pFirst;
}

int main(void)
{
	Input();
	Node* pTmp;
	while (1) {
		pTmp = pop();
		printf("%d ", pTmp->my);
		pTmp->pPrev->pNext = pTmp->pNext;
		pTmp->pNext->pPrev = pTmp->pPrev;
		pFirst = pTmp->pNext;
		if (pFirst->pNext == pFirst) {
			printf("%d ", pFirst->my);
			break;
		}
	}

	return 0;
}
반응형

'프로그래밍 알고리즘' 카테고리의 다른 글

[정올 3115] 긴 자리 나눗셈  (0) 2023.01.10
[정올 3106] 진법 변환  (0) 2023.01.09
[정올 2815] 10진수를 2진수로  (0) 2023.01.09
[정올 2811] 소수와 합성수  (0) 2023.01.09
[정올 2809] 약수  (0) 2023.01.09