paizaラーニング(初心者〜中級者向けのプログラミング学習サービス)の問題集をやってみる。
共通ルール
入力
- 入力値最終行の末尾に改行が1つ入ります。
- 文字列は標準入力から渡されます。
出力
- 最後は改行し、余計な文字、空行を含んではいけません。
5. 数字のみの出力 (paizaランク D 相当)
1行目に行数を表す整数 n、続く n 行で n 個の「文字」と「整数」の組が空白区切りで入力されます。 n 個の整数だけをそのまま順に出力してください。
入力される値
n
S_1 D_1
S_2 D_2
...
S_n D_n期待する出力
n 個の整数を順に改行区切りで出力してください。条件
・1 ≦ n ≦ 10,000
・-10,000 ≦ D_i ≦ 10,000 (ただし、1 ≦ i ≦ n)
・S_iは1つの半角英文字
入力例
4 S 1 F 2 E 5 Y 6
出力例
1 2 5 6
自分の解答
n = gets.to_i ary = [] n.times do a, b = gets.split ary << b end puts ary
ハッシュを使うバージョンも書いてみたが、ハッシュだと順番が変わってしまうことがあるためテストをパスできなかった。順番に意味があるときは配列がよい。
n = gets.to_i hash = {} n.times do a, b = gets.split hash[a] = b end puts hash.values # 順番が変わってしまうためNG
6. 昇順ソート出力 (paizaランク D 相当)
1行目で整数 n が与えられ、2行目で n 個の整数が与えられます。
n 個の整数を昇順に出力してください。入力される値
n
a_1 a_2 ... a_n期待する出力
a_1からa_nの整数を昇順に並び替えて、出力してください。条件
1 ≦ n ≦ 100
-3,000,000 ≦ a_i ≦ 3,000,000 (ただし、1 ≦ i ≦ n)
入力例
8 90 777 8888 121 333 4 29 2
出力例
2 4 29 90 121 333 777 8888
自分の解答
n = gets
numbers = gets.split.map(&:to_i)
puts numbers.sort
問題を見るためのチケットがなくなってしまったので今日はここまで。配列は結構思い通りに操作できるので楽しい。
スキルチェックをやればチケットが手に入るのだが、一番易しいDランクの問題はほぼすべて解き終わっていて、それ以上のランクはそこそこ時間がかかるのでなかなか難しいところ。
レベルアップ問題集をやればBランクまでいけるとのことなので頑張ろう。