kei0425tan’s blog

技術的なことを主に

POH7「サンタ服」ゲットチャレンジ!

POH8の問題を全部解いてしまったので、昔のにも挑戦してみます。

paiza.jp

問題

(適当に省略しています。)

幅 X cm、奥行き Y cm、高さ Z cm の直方体の形をしたケーキがあります。 このケーキに「側面と平行な方向」および「前面と平行な方向」に何回か包丁を入れて、小さなケーキに切り分けることを考えます。 上面と平行な方向(水平方向)には包丁を入れません。

包丁を入れる場所が与えられたとき、切り分けられたケーキの中で最も体積が小さいものを求めてください。

条件

すべてのテストケースにおいて、以下の条件をみたします。

1 ≦ X, Y, Z, N ≦ 100
d_i は 0 または 1
d_i = 0 のとき 1 ≦ a_i ≦ X-1
d_i = 1 のとき 1 ≦ a_i ≦ Y-1
同じ場所に 2 回以上包丁を入れることはない
入力される値はすべて整数

今回も範囲が狭いため普通に探せば問題なさそうです。
単純に、横に切った一番小さいとこと縦に切った一番小さいところを探してかければOK

切った幅を出すのに、reduceを利用しています。
普通にインデックスを使っても全然いいのですが、こんなやり方もあるよということで。
reduce使うなら、minも統合できるのですが、pythonのlambdaが複雑なこと書きにくいのでやっていません。
普通に関数別に書けばよいのですが。。。。