はじめに
はじめまして、SLOTREと申します。
最近、pythonのお勉強をはじめたばかりの駆け出し君です。
作りたいものもあるけれど、まずは基礎力をつけるために・アルゴリズムを理解するためにAtcoderで勉強をはじめてみました。
ぜひ、こうしたら良いよ!ってアドバイスあれば教えていただけるとありがたいです。
やってみた問題
今日は初歩の初歩からやってみると言うことで、りんごさんが何個買えるかな?って感じの問題をやってみました!
問題文 A-Apple
果物屋さんでりんごが売られています。
あなたは次の操作を好きな順で好きなだけ繰り返すことができます。
X 円を払ってりんごを 1 個手に入れる。
Y 円を払ってりんごを 3 個手に入れる。
りんごをちょうど N 個手に入れるには最低何円必要ですか?
コード
まずは、僕が書いたコードです。
import numpy as np
#----変数定義----
numbers = input() #初期入力
#そのままだとsplitしてもstr型で分かれてしまうので、np.arrayにしてまとめてintにして分ける
number_array = np.array(numbers.split(" "), dtype = np.int)
one_apple = number_array[0]
three_apple = number_array[1]
want = number_array[2]
#買うのに必要な代金合計
charge = 0
#---処理部分---
#リンゴを1個買う場合と3個買う場合のコスパを比較、そもそも3個以上買う必要があるか確認
if one_apple > three_apple / 3 and want >= 3:
#3個未満になるまでループ
for i in range(want) :
charge += three_apple
want -= 3
if want < 3:
break
#3個未満買えば良い場合
for i in range(want):
charge += one_apple
want -= 1
if want == 0:
break
print(charge)
考え方
競技プログラミングというものらしく、入力が与えられるそうなので、まずは脳死でそれぞれの値を入れる箱を作っていきました。
で、最初は3個以上買いたい場合はそのまま3個未満になるためにループさせてましたが、問題文をよく読むとコスパも考えないといけなかった・・・
そのため、コスパを考えてループ処理をさせるようにしました。