paizaオンラインハッカソン7に参加してみた – サンタ服(C++, Swift)

当ブログでは順次『paizaオンラインハッカソンVol.7 プログラミングで彼女をつくる』の回答例を上げており、基本的にはC++とSwiftでの解答例を上げている。ソースコードはGitHubでも公開しているので、ソースコードを見たい方はそちらもご確認されたい。今回はカーディガンのお題の解答例と解説を上げたい。今回はもうクリスマスシーズンは終わってしまったが、サンタ服のお題を上げたい。

今回の目的

まず、幅・奥行き・高さ・ケーキを切る回数が入力される。その後、ケーキを切る回数に応じてどの方向1 ・どの場所で切るのかが入力される。それをもとに切り分けられたケーキのうち、一番体積が小さいものを当てるものである。

サンプルコード

C++

参考URL: https://github.com/saitomarch/POH7/blob/master/cpp/santa.cpp

Swift

参考URL: https://github.com/saitomarch/POH7/blob/master/swift/santa.swift

解説

今回はまずケーキの大きさと切る回数を取得した上で、切る回数を横方向・縦方向別に取得した上でソートした。

その後は、ケーキの大きさと切った場所から幅と奥行きを計算して、最も小さい値になるように計算を行っている。この際のforループでは0スタートとそれぞれの切った回数分以下の範囲になっているため、それぞれの長さの求め方は以下のようになっている。

これをもとに最小値を取得する。なお、水平方向に切ることはないため、幅と奥行きだけ計算すれば問題ない。

最後は上記の計算で取り出した幅と奥行き、そして高さをかけた値を出力して終わりである。

最後に

今回のお題はこれまでと比較してかなり複雑で難しいものとなっている。特に切り分けた後のケーキの最小値の取り出し方はどうやって計算するかで難儀するだろう。今回当方のやり方では奥行きと幅を分けて計算したが、それ以外の方法も考えられるだろう。

今回は難しいお題だが、自信のある方はぜひチャレンジしてもらいたい.

ウェブマスター。本ブログでITを中心にいろいろな情報や意見などを提供しております。仕事依頼や相談などについては、Contact Formよりお願いいたします。
  1. ケーキを上から見て縦あるいは横のどちらかのみで、水平方向に切ることはない []