状態を把握するのに、ちょっと時間はかかったが、イメージはできた。しかし場合分けが多く、そこにハマったのでまとめる
目次
概要
- 100階建ての建物
がある。
と
は廊下でつながっていて、
分かかる。
と
は廊下でつながっていて、
分かかる。
と
および
と
は階段でつながっていて、
分かかる。
- 与えられた、
階から
階へ最短時間で移動したときの時間は?
解くときに考えた内容
まずイメージ図
- 文意から、100階建ての建物
は上の一番左のようになっている。
の大小で降りる手段として、廊下か階段かを選択すべきかがわかり、最後は
へ移動するのに
という構図。降りるときと登るときとでことなるのは降りるときしか
へ移動できないので、そこで場合分けが必要。
- まずは、
が同じフロアの場合、もしくは
から
が1階降りる場合。
が最短。
(なぜなら、なので、
は自明)
- 次に2階以上降りる場合。
を
とすると
ということ。
- 1階おりるのに
のとき、廊下を選んで
で
階降りて、最後に
で
へ行く
- 1階おりるのに
のとき、階段を選んで
で
階降りて、最後に
で
へ行く
- 1階おりるのに
- 次に1階以上登る場合。
- これ上記の
を
と考えればいい。
- これ上記の
コード
a, b, x, y = map(int, input().split()) step = b - a if step == 0 or step == -1: ans = x # 下に-1を含めても良い。結果xになるから elif step <= -2: if y >= 2 * x: ans = (abs(step)-1) * 2 * x + x else: ans = (abs(step)-1) * y + x elif step >= 1: if y >= 2 * x: ans = step * 2 * x + x else: ans = step * y + x print(ans)
終わりに
結構きれいに場合分けしないと、うまく行かない。絵に書けばだいたい分かるが、時間かかりすぎた。
参考になる書籍
- 問題解決力を鍛える!アルゴリズムとデータ構造
けんちょんさんこと、大槻さんの書籍である、「問題解決力を鍛える!アルゴリズムとデータ構造」 ご本人の記事の中で難易度は、螺旋本ということで初学者でも非常に結構読みやすい!!!(実際に、けんちょんさんの記事はC++に疎い自分でも、その思考プロセスを学べるくらい丁寧に書かれているし、この書籍も非常に読みやすい)どのようなステータスの人にもおすすめの一冊になっている。
とうとう発売され自分の手元にも来た(2020-10-03)。現在読み中なのである程度読み込んだら感想を書く予定。めっちゃ図が多いし、章末問題もあるしかなりイケてる。答えはC++で書かれているがそのうちPythonでも書かれるとのことなので、自分で前もってやってしまおうと思う(答え合わせできるのはありがたい)。

問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書)
- 作者:大槻 兼資
- 発売日: 2020/10/02
- メディア: 単行本
7章までは別記事に残してある。 blacktanktop.hatenablog.com