【日常のアルゴリズム】500円を片手に自動販売機に行ってみよう(応用編)
日常生活の一例を使ってアルゴリズムを考えてみるシリーズ。今回は、以前考えてみた自動販売機でジュースを購入する事例を少々複雑にした応用編をやってみたいと思います。
ゴール設定
- ゴールは500円で購入できるだけジュースを購入する
- ジュースを何本購入できて、お釣りがいくらかを求める
前提条件
- 購入する自動販売機は120円と180円のジュースだけ販売している
- 最初に180円のジュースから購入する
- 180円のジュースが購入できなくなったら120円のジュースを購入する
- お釣りは返却レバーを下げない限り出てこない
今回のアルゴリズム
前回とゴール設定は同じですが、前提条件が複雑になりました。では、今回のゴールに向けて、どんな作業(処理)が必要かを洗い出してみましょう。あなたも日頃、自動販売機でジュースを購入するシーンを思い浮かべてみてください。
必要な作業
- お金(500円)を入れる
- ジュースを選ぶ(状況に応じて180円か120円を選択する)
- ジュースの購入ボタンを押す
- ジュースを取る
- 残金を確認する
- お釣りの返却レバーを下げる
- お釣りを取る
ざっと挙げてみると以上のような作業が必要でしょうか。次にこれらを組み合わせて、実際に購入できる限りジュースを購入する流れを考えてみましょう。
500円を家が手に自動販売機に行ってみよう
- お金を入れる(500円)
購入1回目
- ジュースを選ぶ(180円のジュース)
- ジュースの購入ボタンを押す
- 出てきたジュースを取り出す
- 残金を確認する(320円)
- まだ残金でジュースが購入できるのでもう一度ジュースを購入する
購入2回目
- 残金を確認してジュースの種類を決める(320円)
- ジュースを選ぶ(180円のジュース)
- ジュースの購入ボタンを押す
- 出てきたジュースを取り出す
- 残金を確認する(140円)
- まだ残金でジュースが購入できるのでもう一度ジュースを購入する
購入3回目
- 残金を確認してジュースの種類を決める(180円)
- ジュースを選ぶ(120円のジュース)
- ジュースの購入ボタンを押す
- 出てきたジュースを取り出す
- 残金を確認する(20円)
- もうジュースを購入できない
- お釣りの返却レバーを下げる
- お釣りを取る
最終的に購入できたジュースは3本で、お釣りは20円でした。
前回と同じような流れでジュースを購入していますが、判断が1つ増えていることにお気づきでしょうか?今回のアルゴリズムでは2回の判断が必要で「ジュースを選ぶ」時と、「引き続きジュースが購入できるかを考える」時に必要になります。
繰り返し処理の中で判断が複数入ってくると少々複雑に感じてしまうこともありますが、上記のように処理を時系列で書き出したり、次に紹介するようにフローチャートを書いてみると混乱せずに正しい流れが描けます。
では、最後に今回のアルゴリズムのフローチャートで確認してみましょう。