葛のメモ帳

自分で調べたことを忘れないためにメモっておきます

葛のメモ帳

自分で調べたことを忘れないためにメモっておきます


AtCoder ABC 259 A - Growth Record を Python3で解く

問題の概要

  • N歳の誕生日Tcmだった
  • 0 ~ X歳まで毎年Dcm伸びた
  • X ~ N歳まで変化はなかった
  • M歳の誕生日、彼の身長が何cmだったか

図解するとわかりやすい

ABC259A解説画像

問題の解き方

M歳はいつか?

  • 0 <= M <= X 歳の時
    • 身長が伸びている時期に当たる
    • M歳の時の身長 = 今の身長 - ( M歳からX歳までの間に伸びた身長 )
  • X <= M <= N 歳の時
    • M歳の時の身長 = X ~ N歳の間は身長が伸びていないので T cm

Python3でプログラミングする

構成

  1. 入力系を作る
  2. 処理系を作る
  3. 出力系を作る

1. 入力系を作る

  • 問題の入力フォーマット
    • スペース区切りの5つの整数
    • N M X T D

今回作成した入力系

n, m, x, t, d = list(map(input().split()))

詳しい説明

  1. input([prompt])で標準入力をstrオブジェクトとして受け取る
  2. str.split()でstrオブジェクトをスペース区切りに分割してiteratorオブジェクトにする
  3. map(func, interator, ...)iteratorオブジェクトの全ての要素にfunctionを適用してiteratorオブジェクトを返す
  4. list(iterator)で受け取ったiteratorオブジェクトをlistオブジェクトにする(コンストラクタ)
  5. Pythonの代入文の仕様で複数ターゲットに代入する

2. 処理系

  • [問題の解き方]で書いたことをif, elseで書く
if x <= m:
    ans = t
else:
    ans = t - d*(x-m)

3. 出力系

  • print()で標準出力として書き出して終了
print(ans)

解答

# input
n, m, x, t, d = list(map(int, input().split()))

# calc
if x <= m:
    ans = t
else:
    ans = t - d*(x-m)

# output
print(ans)

感想

  • macのterminalでpythonを起動するとdefaultでpython2が起動することを忘れていた
  • 小学3年生レベルの計算式の構築が暗算でできないのが悲しかったので記事にして図を書きました。反省。

使ったメソッドの紹介

  • input([prompt])

    • docs.python.org
    • 入力から 1 行を読み込み、文字列に変換して (末尾の改行を除いて) 返す。
  • str.split(sep=None, maxsplit=- 1)

    • docs.python.org
    • 文字列を sep をデリミタ文字列として区切った単語のリストを返す。
    • 連続する空白文字はひとつのデリミタとみなされる。
    • ※デリミタ文字: 項目(フィールド)を区切る記号としてしようされる特殊な文字。区切り文字とも言う。BINARY-IT用語辞典
  • map(function, iterable, ...)

  • class list([iterable])

    • docs.python.org
    • リストはミュータブルなシーケンスである。コンストラクタでリストを構築する