728x90
# 요세푸스 문제 Josephus problem
요세푸스 문제 Josephus problem 혹은 요세푸스 순열 Josephus permutation 이라고 합니다.
자연수 n, k ( k < n )이 있습니다.
n명이 동그랗게 앉아있을 때 임의의 한 명부터 순서를 세어 k번 째 사람을 제외합니다.
다음 사람부터 k번째 사람을 제외합니다.
이렇게 제외되는 사람의 순서가 요세푸스 순열이고,
마지막에 남는 (혹은 제외되는)사람을 구하는 문제가 요세푸스 문제입니다.
# 알고리즘 이해
n=5; k=3; 으로 가정합니다.
즉 다섯 명이 모여있고, 세 번째 순서일 때마다 제외합니다.

# 코드 예제
#include <stdio.h>
#include <queue>
using namespace std;
int main(){
int n, k, x, res;
queue<int> q;
scanf("%d %d", &n, &k);
// n명 번호를 부여하여 큐에 넣기
for(int i=1; i<=n; i++){
q.push(i);
}
// 요세푸스 순열 알고리즘
while(!q.empty()){
for(int i=1; i<k; i++){
x = q.front();
q.pop();
q.push(x);
}
res=q.front();
q.pop();
}
printf("%d", res);
return 0;
}
728x90
'Lang > 알고리즘' 카테고리의 다른 글
[알고리즘/C] 등수 매기기 (브루트 포스: brute force) (0) | 2022.12.21 |
---|---|
[알고리즘] 너비 우선 탐색 Breadth First Search (0) | 2022.12.12 |
[알고리즘/C] 미로찾기 경로탐색 (2차원 행렬 DFS: Depth First Search) (1) | 2022.12.06 |
[알고리즘] 인접행렬과 경로탐색 기초 (그래프 DFS: Depth First Search) (0) | 2022.12.05 |
[알고리즘/C++] 합병 정렬 Merge Sort (0) | 2022.11.29 |