Rubyでのキューの扱い

Rubyでは、Array#shiftを使用して簡単にキューを実現できる

キューで一定時間のプロセスを順番に実行していく、ラウンドロビンスケジューリングを実装する。

# 入力
5 100
p1 150
p2 80
p3 200
p4 350
p5 20
n, q = gets.chomp.split(' ').map(&:to_i)

a = []
now = 0

n.times do
  tmp = gets.chomp.split(' ')
  a << tmp
end

while !a.empty? do
  process = a.shift
  if process[1].to_i - q <= 0
    now += process[1].to_i
    puts "#{process[0]} #{now}"
  else
    process[1] = process[1].to_i - q
    now += q
    a << process
  end
end
# 出力
p2 180
p5 400
p1 450
p3 550
p4 800