11866: 요세푸스 문제 0

2022. 6. 17. 23:54C언어/백준

-Class2 : Silver5

https://www.acmicpc.net/problem/11866

 

11866번: 요세푸스 문제 0

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)

www.acmicpc.net

 

-결과

 

-코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int main()
{
	int i, j, N, K, cnt, idx;

	scanf("%d %d", &N, &K);

	int* table = (int*)calloc(N, sizeof(int));

	for (i = 0; i < N; i++) 
	{
		table[i] = i + 1;
	}

	printf("<%d", table[K - 1]); 
	table[K - 1] = -1;

	for (i = 0, idx = K; i < N - 1; i++) 
	{
		cnt = 0; j = -1;
		while (cnt < K) 
		{
			j += 1;
			if (table[(idx + j) % N] != -1)
				cnt += 1;
		}
		idx = (idx + j) % N; 
		printf(", %d", table[idx]);
		table[idx] = -1;
	}
	printf(">");
	return 0;
}

 

-풀이

처음 입력 받은 N 크기의 배열을 할당하고, 배열에 1부터 N까지 저장한다.

K번째 값을 제거하고 -1로 채워넣고 table[k-1]을 지운다.

다시 k-1번째부터 반복문을 돌고, k번째 값을 찾으면 인덱스를 현재 위치로 바꾸고 -1로 채워넣는 과정을 반복한다.

'C언어 > 백준' 카테고리의 다른 글

10816: 숫자 카드 2  (0) 2022.06.18
2839: 설탕 배달  (0) 2022.06.18
4949: 균형잡힌 세상  (0) 2022.05.25
2164: 카드2  (0) 2022.05.25
1978: 소수 찾기  (0) 2022.05.24