AtCoder ABC 123 B – Five Dishes Python解説

スポンサーリンク

Five Dishes

AtCoder 料理店では、以下の 5 つの料理が提供されています。ここで、「調理時間」は料理を注文してから客に届くまでの時間とします

ABC 丼: 調理時間 A 分
ARC カレー: 調理時間 B 分
AGC パスタ: 調理時間 C 分
APC ラーメン: 調理時間 D 分
ATC ハンバーグ: 調理時間 E 分

また、この店には以下のような「注文のルール」があります。

注文は、10 の倍数の時刻 (時刻 0, 10, 20, 30, …) にしかできない。
一回の注文につき一つの料理しか注文できない。
ある料理を注文したら、それが届くまで別の注文ができない。ただし、料理が届いたちょうどの時刻には注文ができる。

E869120 君は時刻 0 に料理店に着きました。彼は 5 つの料理全てを注文します。最後の料理が届く最も早い時刻を求めてください。ただし、料理を注文する順番は自由であり、時刻 0 に注文することも可能とであるとします。

AtCoder Beginner Contest 「Five Dishes」

料理を注文できる時間が10の倍数の時刻と決まっているため、次の注文までの待ち時間が一番長くなる注文を最後にすれば、最適化することができます。

方針としては、調理時間+次の注文ができるまでの時間を足して、そこから一番待ち時間が長いものを引きます。

a = [int(input()) for _ in range(5)]

b = []
c = 0

for i in range(5):
    if a[i] % 10 != 0:
        c = max(c, 10 - a[i] % 10)
        a[i] +=10 - a[i] % 10
        b.append(a[i])
    else:
        b.append(a[i])
    
print(sum(b) - c)

この問題では時刻0に注文することが可能なため条件式を使います。10で割り切れない場合、次に注文が可能となる10の倍数までの時間を足し配列bに入れていきます。変数cに待ち時間が一番長くなるものを入れ、最後に、配列bの合計時間から一番待ち時間が長いものを引いて答えを求めています。

AtCoderB問題

Posted by cheese