A - Circle Pond(AtCoder Beginner Contest 163復習)

4月19日、AtCoder Beginner Contest 163Rubyで参加しました。今回はA問題の復習です。

masuyama13.hatenablog.com

A - Circle Pond

A - Circle Pond

問題文

半径 R の円の周長を出力してください。

制約
1 ≤ R ≤ 100
入力は全て整数である。

入力
入力は以下の形式で標準入力から与えられます。
R

出力
円の周長を出力せよ。 なお、想定解答との絶対誤差または相対誤差が 10−2 以下であれば正解として扱われる。

提出したコード

r = gets.to_i
puts r * 2 * Math::PI

結果:AC(正解) 実行時間:59 ms

考えたことを言語化してみる

1行目:getsで取得した標準入力値(円の半径)を、to_iで文字列から整数に変換(末尾の改行も削除)。

2行目:円周を求める式は「直径×円周率」。つまり「半径×2×円周率」。円周率は3.14...でもいいのですが、Rubyにはそういう定数があったような…と思い、るりまサーチで検索。

docs.ruby-lang.org

「円周率」と入力して検索すると、2つ目にMath::PIが見つかりました。MathモジュールはRubyに元々組み込まれているもの(つまりrequire不要で使用可能)で、さまざまな数学関数が定義されています。PIは円周率の定数です。

p Math::PI
#=> 3.141592654

無事求めていたものが見つかったので、それを使って上記コードを書き、paiza.IOでテストしました。問題ページ上の入力例を試しうまくいったので、提出。

改善点など

今回提出したコードを見直してみて、悪くないかなと思いますが、他にもいろんな書き方ができます。

#1行で書く
puts gets.to_i * 2 * Math::PI

#計算回数を減らす(誤差許容範囲に注意)
r = gets.to_i
puts r * 6.28

このくらいでは、速度の差はよくわかりませんでした。