0
0

More than 3 years have passed since last update.

競技プログラミング基礎問題 問題名:正直者

Posted at

競技プログラミングの前提

自分が解いているatcoderでは基本的には
何かしらの入力があって、出力を回答として返すというのがルールになっています。
多分どの競技プログラミングもそうですが。。

具体的には以下の流れになります。

入力をgetsで受け取る
↓
何かしら処理をする
↓
putsで回答を出力

いかに具体的な問題文と解答を載せています。

問題文

いま、神の恵みで高橋くんにお金が与えられます。
神は高橋くんに 2 つの金額を提示します。
正直者の高橋くんは、常に大きな金額を選択します。
そこで、与えられた2 つの整数のうち、大きい方の値を出力するプログラムを書いてください。

ルール

スクリーンショット 2020-10-14 8.50.23.png

入出力のサンプル

以下の例1では10 11という文字列をgetsで受け取って、11をputsで返せばいい。ということになります。

スクリーンショット 2020-10-14 8.50.56.png

回答例

とってもわかりやすく書いた時

sample1.rb
# getsで入力を受け取ります。
input = gets # "10 11"が入る

# 文字列をsplitで空白で区切って配列に格納する。
input_array = input.split(' ') # input_array = [10,11]となっている

# わかりやすくするために2つの変数に置き換える
x = input_array[0] # "10"
y = input_array[1] # "11"

# 比較するためにstringからintegerに変換
x = x.to_i # 10
y = y.to_i # 11

# xとyでどちらが大きいか比べる
if x > y # xの方がyより大きい時
  puts x # xを回答として出力
else     # yの方がxより大きい時
  puts y
end

シンプルに書いた場合

sample2.rb
x,y = gets.split(' ').map{|i| i.to_i}
puts x > y ? x : y

getsとsplitをつなげて書いたり三項演算子を使うことですっきり纏まっています。
この記載量では問題ないですが、上のプログラムのように変数を手当たり次第定義すると処理速度が落ちたりします。
まずは正確な回答ができることが第一ですが、余裕があればリファクタリングをしてスッキリ書けるといいかと思います!

まとめ

競技プログラミングではgetsで始まりputsで終わる。
スッキリ書くと処理速度が上がる。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0