LoginSignup
0
0

More than 3 years have passed since last update.

AtCoderでRuby学習9【第一回アルゴリズム実技検定 3番目】配列要素の並び替え

Last updated at Posted at 2020-05-21

はじめに

Ruby学習の一環として「アルゴリズム実技検定」に挑戦します。
そのための学習の中で学んだことをアウトプットしていきます。
今回は「第一回アルゴリズム実技検定」の三問目(3番目)より。
第一回アルゴリズム実技検定 過去問

自分の解答と、解答する中で学んだ表現・メソッドなどを紹介していきます。

問題

6つの相異なる整数 A, B, C, D, E, Fが与えられる。
このうち 3番目に大きい数を調べるプログラムを作成せよ。

制約
・1≦A,B,C,D,E,F≦100
・A,B,C,D,E,Fは全て異なる
・入力中の値はすべて整数である。

入力は以下の形で与えられる。

A B C D E F

入力例
4 18 25 20 9 13
出力例
=> 13

解答

まずは僕が提出した解答から。

ary = gets.split(" ").map(&:to_i)
r_ary = ary.sort
print r_ary[3]

入力される文字列を整数として配列で受け取り、
sortメソッドを使って並び替え、3番目に大きな整数を出力しています。

ここからは今回初めて使用したsortメソッドについてまとめていきます。

sortメソッド

配列の内容をソート(並び替え)をします。
要素同士の比較は <=> 演算子を使って行い、sort はソートされた配列を生成して返します。

文字列の並び替え

文字列が入った配列に対してソートすると、「a,b,c...」や「あ、い、う…」といった順番に並び替えをしてくれます。

ary1 = [ "d", "a", "e", "c", "b" ]
p ary1.sort
#=> ["a", "b", "c", "d", "e"]

数字が文字列の要素として配列に入っている場合は、以下のような感じ。

ary2 = ["9", "7", "10", "11", "8"]
p ary2.sort
#=> ["10", "11", "7", "8", "9"]                        

整数の並び替え

初めから整数の要素として配列に入っている場合は、解答のように簡潔に書けますが、
文字列として配列に入っている場合は、ブロック{}を使って以下のようにします。

ary2 = ["9", "7", "10", "11", "8"]
p ary2.sort{|a, b| a.to_i <=> b.to_i }
#=> ["7", "8", "9", "10", "11"]

ただ、ブロックの中で比較を行うためにto_iメソッドを使って整数に変換しているのであって、
生成された配列では文字列に戻っているところに注意したいです。

これと同じことがsort_byメソッドでも行えます。

ary2 = ["9", "7", "10", "11", "8"]
p ary2.sort_by{|a| a.to_i}
#=> ["7", "8", "9", "10", "11"]

最後に

以上、「第一回アルゴリズム実技検定」の三問目(3番目)を解く中で学んだソートについてまとめました。

もし間違いなどございましたら、ご指摘いただけると嬉しいです。

0
0
0

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