はじめに
こんにちは。KoSaxです!
今日は、paizaのプログラミングスキルチェックを初めて解いた時、苦戦したことを記事にしようと思います。
paizaのプログラミングスキルチェックは楽しくスキルを積み重ねられるのが、大きな魅力です。また、「paizaレーティング」というプログラミングスキルの指標を取り入れている点が最大の魅力でしょう。
paizaのプログラミングスキルチェックで、まず最初に値を受け取るために使うgets
メソッドについて、本日はアウトプットしたいと思います。それでは早速見ていきましょう!
paizaの問題文
D < C < B < A < S のランクに分けて問題が出題されます。
以下のような入力値が渡されるCランクの問題がありました。
🟨入力される値
入力は以下のフォーマットで与えられます。
---
N M
A B C
R_1
R_2
...
R_N
---
・1行目には、 nnn の数を表す整数 N および mmm の数を表す整数 M が半角スペース区切りでこの順で与えられます。
・2行目には、 aaa の数を表す整数 A 、 bbb の数を表す整数 B 、 ccc の数を表す整数 C が半角スペース区切りでこの順で与えられます。
・続く N 行のうちの i 行目 (1 ≦ i ≦ N)には i 番目の iii が M ヶ月間に販売した rrr の数を表す整数 R_i が与えられます。
・入力は合計で 2 + N 行となり、入力値最終行の末尾に改行が 1 つ入ります。
それぞれの値は文字列で標準入力から渡されます。
入力例
3 3
1000 1000 50
25
80
500
このような標準入力から値を取り出す方法を見ていきたいと思います。
標準入力とは
- プログラムがデータを読み込む先のこと
- 通常、「キーボードからの入力」「他のコマンドから渡されるデータ」などのことを指す
- 例:以下のテキストはユーザーが入力した値
5 10
5
11
20
8
7
- このようなユーザーが入力した値を、
gets
メソッドを使って変数に格納し、取得していきます。
標準入力から値を取得するために必要なメソッド
gets
メソッドとは
-
標準入力から、「1行分の文字列」+「
\n
(改行文字)」を取得するメソッド
gets
メソッドの注意点
- 文字列として取得すること
\n
(改行文字)を含んで取得すること- 「文字列」「文字列の配列」「数値」「数値の配列」として取得したい場合、他のメソッドを組み合わせる必要がある
- 標準入力のx行目を取得したい場合、x回
gets
メソッドを実行すると取り出すことが可能
.chomp
メソッドとは
- 文字列の末尾に
\n
(改行文字)がある場合、取り除くメソッド
.split
メソッドとは
- 文字列を、指定した区切り文字で分割し、文字列の配列にするメソッド
- つまり、
文字列
+.split(区切り文字)
➡︎ 文字列の配列+区切り文字 - 引数なしの場合、空白で文字列を分割する
.map(&:to_i)
とは
- 配列に格納されている文字列を、整数に変換する役割
.map
メソッドとは
- 配列やEnumerableモジュールの各要素に対して、私たブロックを一度ずつ実行し、その戻り値を新しい配列に返すメソッド
以下の標準入力例をもとに実際のコードと実行結果を記述していきます。
5 10
5
11
文字列として取得(基本)
var
=gets
+.chomp
gets
のみ=文字列(\n
あり)
n = gets
puts n
# 実行結果 => "5 10\n"
gets
+.chomp
=文字列(\n
なし)
n = gets.chomp
puts n
# 実行結果 => "5 10"
文字列の配列として取得
var
=gets
+.chomp
+.split
n = gets.chomp.split
puts n
# 実行結果 => ["5, 10"]
数値(整数integer)として取得
a, b
= gets
+.chomp
+.split
+.map(&:to_i)
a, b = gets.chomp.split.map(&:to_i)
puts a
puts b
# 実行結果 => 5, 10
数値(整数integer)の配列として取得
var
= gets
+.chomp
+.split
+.map(&:to_i)
n = gets.chomp.split.map(&:to_i)
puts n
# 実行結果 => [5, 10]
-
n = [5, 10]
であるから、インデックスで配列内の数値にアクセス可能 - 例:
n[0] # => 5
最後に
いかがだったでしょうか。
「文字列」「数値」「配列」のうち何を扱うことができるメソッドなのかを見極めないと、自分が意図した値を得られないことがわかります。
取得した値をループ処理する場合も、.each
メソッドは配列にしか使えません。
プログラミング初学者として、意識して学習しないといけないポイントだと感じました。
今日からも頑張って勉強していきます。頑張るぞー!