CS/Data Structure & Algorithm

큐를 활용한 문제 [Josephus problem]

Coding Kitsune 2022. 2. 2. 18:46

Jesephus problem은 이번에 배운 큐를 이용하여 풀 수 있는 대표적인 문제다.

 

Joesphus(n, k)  => n 총 인원  k => 몇번째 사람마다 제외할것인가

 

 

Josephus problem

 

가령 Joesphus(5, 2)일때 5명 중 2번째 마다 제외해서 마지막에 누가 남는지 알아보는 것이다.

 

이때 [1, 2, 3, 4, 5] 큐를 만들어서 enqueue와 dequeue를 이용하여 풀어보자

 

 

[1, 2, 3, 4, 5]  1은 dequeue하고 바로 enqueue => [1, 2, 3, 4, 5, 1]

 

2는 해당되기 때문에 dequeue만 실행 => [1, 2, 3, 4, 5, 1]

 

3은 dequeue하고 바로 enqueue => [1, 2, 3, 4, 5, 1, 3]

 

4는 해당되기 때문에 dequeue만 실행 => [1, 2, 3, 4, 5, 1, 3]

 

5는 dequeue하고 바로 enqueue => [1, 2, 3, 4, 5, 1, 3, 5]

 

1은 해당되기 때문에 dequeue만 실행 => [1, 2, 3, 4, 5, 1, 3, 5]

 

3은 dequeue하고 바로 enqueue => [1, 2, 3, 4, 5, 1, 3, 5, 3]

 

5는 해당되기 때문에 dequeue만 실행 => [1, 2, 3, 4, 5, 1, 3, 5, 3]

 

최종적으로 3이 남음  => [1, 2, 3, 4, 5, 1, 3, 5, 3]