こちらの問題です。
問題内容はこちら
109 人の人がいます。人には 1 から 109 までの番号がついています。
1 番と 2 番の人、3 番と 4 番の人、5 番と 6 番の人、… がペアになりました。
n 番の人とペアになった人の番号を求めてください。
fmfm...
入力例はこんなです。
入力例1
100
出力例1
99入力例2
123456789
出力例2
123456790
fmfm...
入力例をみると、偶数だったら -1 して、奇数なら +1 で良いのではとシンプルに思いました。他に例外が無いかを考えても特に思いつきません。
とりあえず書いてみました。
class Pair def initialize @num = STDIN.gets.to_i raise 'Opps' unless @num.between?(1,1_000_000_000) end def result if @num.even? @num - 1 else @num + 1 end end end pair = Pair.new puts pair.result
今回はなるべく ruby っぽい書き方を意識してみました。
エイヤッとダメ元で実行して見ると...
Accepted
あれ、通ってしまった。これでいいの?まじで?
if 分周りに素朴感があったので、三項演算子にした結果はこちら
class Pair def initialize @num = STDIN.gets.to_i raise 'Opps' unless @num.between?(1,1_000_000_000) end def result @num.even? ? @num - 1 : @num + 1 end end pair = Pair.new puts pair.result
こちらも通ったのですが、
Exec time 57ms -> 51ms Memory usage 4872KB -> 5044KB
と、(三項演算子のほうが)若干パフォーマンスが悪いという結果に。へー。
今回は PR はこちら。
課題 034 を追加 by ginbear · Pull Request #2 · ginbear/atcoder · GitHub
おしまい。