0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

`gets`メソッドを使って、標準入力から意図した値を取得する手順

Last updated at Posted at 2025-06-16

はじめに

こんにちは。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

文字列として取得(基本)

vargets.chomp

getsのみ=文字列(\nあり)

n = gets
puts n
# 実行結果 => "5 10\n"

gets.chomp=文字列(\nなし)

n = gets.chomp
puts n
# 実行結果 => "5 10"

文字列の配列として取得

vargets.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メソッドは配列にしか使えません。
プログラミング初学者として、意識して学習しないといけないポイントだと感じました。
今日からも頑張って勉強していきます。頑張るぞー!

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?