1158: 요세푸스 문제
2022. 9. 24. 02:39ㆍC언어/백준
자료구조
실버 4
https://www.acmicpc.net/problem/1158
1158번: 요세푸스 문제
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)
www.acmicpc.net
-결과

-코드
#include<stdio.h>
int main() {
int N, K, check[5002] = {0, }, cur;
scanf("%d %d", &N, &K);
cur = K;
printf("<%d", cur);
check[cur] = 1;
for(int i=0; i<N-1; i++) {
for(int j=0; j<K; j++) {
while(1) {
cur++;
if (cur > N) {
cur = 1;
}
if (!check[cur]) {
break;
}
}
}
printf(", %d", cur);
check[cur] = 1;
}
printf(">");
}
-풀이
k번째 사람을 제거한 후 제거되는 사람의 순서를 출력하면 되기 때문에
먼저 번호를 k로 고정해야 한다.
먼저 for문으로 n개의 번호가 제거될 때까지 반복되게 한다.
그 이후 다시 안쪽에 for문을 이용하여 k개의 번호를 지나면 제거하도록 반복문을 작성한다.
미리 선언한 변수와 배열을 이용하여 번호의 제거를 확인한 후에 번호를 출력하도록 작성한다.
'C언어 > 백준' 카테고리의 다른 글
18258: 큐 2 (0) | 2022.09.24 |
---|---|
3052: 나머지 (0) | 2022.09.24 |
10815: 숫자 카드 (0) | 2022.09.24 |
17608: 막대기 (0) | 2022.09.11 |
12605: 단어 순서 뒤집기 (0) | 2022.09.11 |