# C/C++ 로 배우는 자료구조론 연습문제 7.33
class CircularQueue
def initialize(size)
@memory = []
@front = 0
@rear = 0
@queue_size = size
end
def is_empty
return @front == @rear
end
def is_full
return ((@rear + 1) % @queue_size) == @front
end
def enqueue(data)
return nil if is_full
@rear = (@rear + 1) % @queue_size
@memory[@rear] = data
end
def dequeue
return nil if is_empty
@front = (@front + 1) % @queue_size
return @memory[@front]
end
def size
if @rear > @front
return @rear - @front
elsif @rear == @front
return 0
else
return @rear + @queue_size - @front
end
end
end
def print_josephus_problem_survive_index(person_count, execute_interval)
queue = CircularQueue.new(person_count + 1)
(1..person_count).each { |i| queue.enqueue i }
while queue.size >= execute_interval
(execute_interval - 1).times do
person = queue.dequeue
queue.enqueue person
end
puts "Executed : " + queue.dequeue.to_s
end
until queue.is_empty
puts "Survived : " + queue.dequeue.to_s
end
end
print_josephus_problem_survive_index(41, 3)