問題
Rubyで配列を降順にするには?
#降順にする a = [0,9,4,5] a = a.sort_by { |n| n }.reverse
#実行結果
[9, 5, 4, 0]
問題
Rubyで配列の中で加算しながら1の位を取得する
入力値
62 89
期待する出力
8 7
コードと解説 (入力例1で解説)
#1行目の半角スペース刻みの入力値を文字列として各変数に代入 n, m = gets.split #n = ["62"] → ["6","2"]→ [6,2]→ [8] → [8] → 8 n.chars.map(&:to_i).sum.digits.take(1).pop #m = ["89"] → ["8","9"]→ [8,9]→ [17] → [7] → 7 m.chars.map(&:to_i).sum.digits.take(1).pop
1:.charsで文字列をバラバラにする[’89’] → [‘8′,’9’]
2:.map(&:to_i)で文字列を数字に変える[‘8′,’9’]→ [8,9]
3:.sumで配列の中身の数字を合計する[8,9]→[17]
4:.digits.take(1)で1の位を取り出す[17]→[7]
5:.popで配列から取り出す[7] → 7
問題
配列内の数字が続いている時グループ化して最小を足し合わせる
8 10 11 12 21 22の場合
[[8], [10, 11, 12], [21, 22]]←このようにして各配列の最小の値を足し合わせる
入力値
6 8 10 11 12 21 22
期待する出力
39
コードと解説 .chunk_whileを使えば楽にできる
#空の配列で初期化する answer = [] #1行目の入力値(数値)を変数に代入する n = gets.to_i #2行目の半角スペース刻みの入力値を配列に代入してから昇順に並び替える a = gets.split.map(&:to_i).sort group = a.chunk_while {|i, j| i + 1 == j }.to_a #配列の長さで繰り返す group.size.times do |i| #各配列の最小値を配列に挿入する answer << group[i].min end puts answer.sum
※ポイント
group = a.chunk_while {|i, j| i + 1 == j }.to_a
#実行結果[[8], [10, 11, 12], [21, 22]]