今回はpaiza 標準入力メニューセクション4~6(整数値の入力)を解説します。
セクション4は、複数行の入力データを整数値で受け取る問題です。
セクション5は、半角スペース区切りの入力データがあった場合に半角スペースで分割して、各要素の文字列を整数値で受け取る問題です。
セクション6は、1行目で要素数nが与えられ、続くn行の文字列を整数値で受け取る問題と、1行目または1要素目で要素数nが与えられ、半角スペース区切りの文字列を整数値で受け取る問題です。
目次
本記事で使用しているメソッドについて
解答例で使っているメソッドについて、下記の記事で詳しく解説していますので参考にしてみて下さい。
- [Ruby] 標準入力によるデータ取得1
- [Ruby] 標準入力によるデータ取得2
- [Ruby] 標準入力によるデータ取得3
- [Ruby] 標準出力(データを任意に整形して出力する)
- [Ruby]配列の基本操作1
- [Ruby]繰り返し処理
セクション4:【整数の行入力】1,000行の整数の入力
4-STEP1: 1 行の整数の入力 (paizaランク D 相当)
1行の文字列入力を整数型で受け取り、そのまま出力する問題です。
入出力例
# 入出力例 INPUT1 = <<~"EOS" 813 EOS OUTPUT1 = <<~"EOS" 813 EOS INPUT2 = <<~"EOS" 2020 EOS OUTPUT2 = <<~"EOS" 2020 EOS
Ruby解答例1
getsメソッドで標準入力から1行分の入力データを受け取り、to_iメソッドで整数型に変換して変数aに代入し、putsメソッドで変数aを出力します。
# 解答例 # 入力 a = gets.to_i # 出力 puts(a)
Python解答例
Pythonのinput()メソッドで入力データを受け取り、intメソッドで整数型に変換して変数aに代入し、printメソッドで変数aを出力します。
# 解答例 # 入力 a = int(input()) # 出力 print(a)
4-STEP2: 2 行の整数の入力 (paizaランク D 相当)
2行分の文字列入力を受け取って整数型に変換し、受け取った順に改行区切りで出力する問題です。
入出力例
# 入出力例 INPUT1 = <<~"EOS" 81 3 EOS OUTPUT1 = <<~"EOS" 81 3 EOS INPUT2 = <<~"EOS" 1131 9415 EOS OUTPUT2 = <<~"EOS" 1131 9415 EOS
Ruby解答例1
getsメソッドとto_iメソッドを2セット実行すれば、2行分のデータを整数型で受け取ることが出来ます。
# 解答例 # 入力 a = gets.to_i b = gets.to_i # 出力 puts(a) puts(b)
Python解答例
# 解答例 # 入力 a = int(input()) b = int(input()) # 出力 print(a) print(b)
4-STEP3: 5 行の整数の入力 (paizaランク D 相当)
5行分の文字列入力を受け取って整数型に変換し、受け取った順に改行区切りで出力する問題です。
入出力例
# 入出力例 INPUT1 = <<~"EOS" 1 2 3 4 5 EOS OUTPUT1 = <<~"EOS" 1 2 3 4 5 EOS INPUT2 = <<~"EOS" 1111 3333 5555 7777 9999 EOS OUTPUT2 = <<~"EOS" 1111 3333 5555 7777 9999 EOS
Ruby解答例1
n.times
でn=5 回のループを設定し、.map { gets.to_i }
で各入力データを整数型に変換して、配列aryに格納しています。
# 解答例1 n = 5 # 入力 ary = n.times.map { gets.to_i } # 出力 puts(ary)
Ruby解答例2
n.times
でn=5 回のループを設定し、ary.push(gets.to_i)
で入力文字列を整数型に変換し、空で初期化した配列aryに追加しています。
# 解答例2 n = 5 # 入力 ary = [] n.times do ary.push(gets.to_i) end # 出力 puts(ary)
Python解答例
Pythonだとリスト内法表記でシンプルに書けます。
# 解答例 n = 5 # 入力 ary = [int(input()) for _ in range(n)] # 出力 [print(num) for num in ary]
4-STEP4: 100 行の整数の入力 (paizaランク D 相当)
100行分の文字列入力を受け取って整数型に変換し、受け取った順に改行区切りで出力する問題です。
入出力例
一部省略します。
# 入出力例 INPUT1 = <<~"EOS" 4090 4199 . 省略 . 9976 4574 EOS OUTPUT1 = <<~"EOS" 4090 4199 . 省略 . 9976 4574 EOS
Ruby解答例1
STEP3 解答例1の n=10 を n=100 にします。
# 解答例1 n = 100 # 入力 ary = n.times.map { gets.to_i } # 出力 puts(ary)
Ruby解答例2
STEP3 解答例2の n=10 を n=100 にします。
# 解答例2 n = 100 # 入力 ary = [] n.times do ary.push(gets.to_i) end # 出力 puts(ary)
Python解答例
STEP3 解答例の n=10 を n=100 にします。
# 解答例 n = 100 # 入力 ary = [int(input()) for _ in range(n)] # 出力 [print(num) for num in ary]
4-FINAL: 【整数の行入力】1,000行の整数の入力 (paizaランク D 相当)
1000行分の文字列入力を受け取って整数型に変換し、受け取った順に改行区切りで出力する問題です。
入出力例
一部省略します。
# 入出力例 INPUT1 = <<~"EOS" 1189 8004 . 省略 . 5707 5095 EOS OUTPUT1 = <<~"EOS" 1189 8004 . 省略 . 5707 5095 EOS
Ruby解答例1
STEP3 解答例1の n=10 を n=1000 にします。
# 解答例1 n = 1000 # 入力 ary = n.times.map { gets.to_i } # 出力 puts(ary)
Ruby解答例2
STEP3 解答例2の n=10 を n=1000 にします。
# 解答例2 n = 1000 # 入力 ary = [] n.times do ary.push(gets.to_i) end # 出力 puts(ary)
Python解答例
STEP3 解答例の n=10 を n=1000 にします。
# 解答例 n = 1000 # 入力 ary = [int(input()) for _ in range(n)] # 出力 print(ary)
セクション5:【整数の半角スペース区切りの入力】1,000個の整数の半角スペース区切りの入力
5-STEP1: 1 つの整数の入力 (paizaランク D 相当)
1行の文字列入力を整数型で受け取り、そのまま出力する問題です。
入出力例
# 入出力例 INPUT1 = <<~"EOS" 813 EOS OUTPUT1 = <<~"EOS" 813 EOS INPUT2 = <<~"EOS" 10000 EOS OUTPUT2 = <<~"EOS" 10000 EOS
Ruby解答例1
getsメソッドで標準入力から1行分の入力データを受け取り、to_iメソッドで整数型に変換して変数aに代入し、putsメソッドで変数aを出力します。
# 解答例 # 入力 a = gets.to_i # 出力 puts(a)
Python解答例
# 解答例 # 入力 a = int(input()) # 出力 print(a)
5-STEP2: 2 つの整数の半角スペース区切りの入力 (paizaランク D 相当)
入力文字列を半角スペースで2個に分割して整数型データに変換し、先頭から順に改行区切りで出力する問題です。
入出力例
# 入出力例 INPUT1 = <<~"EOS" 8 13 EOS OUTPUT1 = <<~"EOS" 8 13 EOS INPUT2 = <<~"EOS" 1234 5678 EOS OUTPUT2 = <<~"EOS" 1234 5678 EOS
Ruby解答例
gets.split
で入力文字列を半角スペースで文字列要素が2個の配列に分割し、.map(&:to_i)
で各要素を整数型に変換しています。
# 解答例1 # 入力 a, b = gets.split.map(&:to_i) # 出力 puts(a) puts(b)
Python解答例
# 解答例 # 入力 a, b = [*map(int, input().split())] # 出力 print(a) print(b)
5-STEP3: 5 つの整数の半角スペース区切りの入力 (paizaランク D 相当)
入力文字列を半角スペースで5個に分割して整数型データに変換し、先頭から順に改行区切りで出力する問題です。
入出力例
# 入出力例 INPUT1 = <<~"EOS" 2 0 8 1 3 EOS OUTPUT1 = <<~"EOS" 2 0 8 1 3 EOS INPUT2 = <<~"EOS" 1234 5678 9101 1121 3141 EOS OUTPUT2 = <<~"EOS" 1234 5678 9101 1121 3141 EOS
Ruby解答例1
STEP2 とほぼ同じコードですが、配列aryにデータを格納しています。
# 解答例 # 入力 ary = gets.split.map(&:to_i) # 出力 puts(ary)
Python解答例
# 解答例 # 入力 ary = [*map(int, input().split())] # 出力 [print(num) for num in ary]
5-STEP4: 10 個の整数の半角スペース区切りの入力 (paizaランク D 相当)
入力文字列を半角スペースで10個に分割して整数型データに変換し、先頭から順に改行区切りで出力する問題です。
入出力例
# 入出力例 INPUT1 = <<~"EOS" 10 9 8 7 6 5 4 3 2 1 EOS OUTPUT1 = <<~"EOS" 10 9 8 7 6 5 4 3 2 1 EOS
Ruby解答例1
STEP3 同じコードです。
# 解答例 # 入力 ary = gets.split.map(&:to_i) # 出力 puts ary
Python解答例
# 解答例 # 入力 ary = [*map(int, input().split())] # 出力 [print(num) for num in ary]
5-FINAL: 【整数の半角スペース区切りの入力】1,000個の整数の半角スペース区切りの入力 (paizaランク D 相当)
入力文字列を半角スペースで1000個に分割して整数型データに変換し、先頭から順に改行区切りで出力する問題です。
入出力例
# 入出力例 INPUT1 = <<~"EOS" 5294 3387 . 省略 . 4430 4344 EOS OUTPUT1 = <<~"EOS" 5294 3387 . 省略 . 4430 4344 EOS
Ruby解答例1
STEP3 と同じコードです。
# 解答例 # 入力 ary = gets.split.map(&:to_i) # 出力 puts ary
Python解答例
# 解答例 # 入力 ary = [*map(int, input().split())] # 出力 [print(num) for num in ary]
セクション6:改行区切りでの N 個の整数の入力 (paizaランク D 相当)
6-STEP1: 改行区切りでの N 個の整数の入力 (paizaランク D 相当)
1行目で行数nが与えられ、続くn行の文字列入力を整数型に変換し、先頭から順に改行区切りで出力する問題です。
入出力例
# 入出力例 INPUT1 = <<~"EOS" 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 EOS OUTPUT1 = <<~"EOS" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 EOS
Ruby解答例1
1行目の整数nを受け取れば、あとはセクション4と同じコードです。
# 解答例 # 1 行目の入力 n = gets.to_i # 続く n 行の入力 ary = n.times.map { gets.to_i } # 出力 puts(ary)
Python解答例
# 解答例 # 1 行目の入力 n = int(input()) # 続く n 行の入力 ary = [int(input()) for _ in range(n)] # 出力 [print(num) for num in ary]
6-STEP2: 2 行目で与えられる N 個の整数の入力 (paizaランク D 相当)
1行目で要素数nが与えられ、2行目のn個の文字列を半角スペースで分割して整数型に変換し、先頭から順に改行区切りで出力する問題です。
入出力例
# 入出力例 INPUT1 = <<~"EOS" 6 6561 3785 6338 9568 4956 557 EOS OUTPUT1 = <<~"EOS" 6561 3785 6338 9568 4956 557 EOS
Ruby解答例
1行目で要素数nが与えられますが、2行目の文字列を半角スペースで分割すると自動的にn個になるため、セクション5と同じコードになります。
# 解答例 # 1 行目の入力 n = gets.to_i # 2 行目の入力 ary = gets.split.map(&:to_i) # 出力 puts(ary)
Python解答例
# 解答例 # 1 行目の入力 n = int(input()) # 2 行目の入力 ary = [int(num) for num in input().split()] # 出力 [print(num) for num in ary]
6-STEP3: 1 行目で与えられる N 個の整数の入力 (paizaランク D 相当)
1行の半角スペース区切りでデータが与えられ、1個目の要素が要素数n、2個目以降の要素をデータとして受け取り、整数型に変換し、先頭から順に出力する問題です。
入出力例
INPUT1 = <<~"EOS" 13 5085 2923 8669 3231 7032 73 2683 8317 5545 9774 7179 2646 2470 EOS OUTPUT1 = <<~"EOS" 5085 2923 8669 3231 7032 73 2683 8317 5545 9774 7179 2646 2470 EOS
Ruby解答例1
gets.split
で入力文字列を半角スペースで分割した配列を、.map(&:to_i)
で整数型に変換し、先頭要素を変数nへ、続く要素を配列aryへ格納します。
# 解答例1 # 入力 n, *ary = gets.split.map(&:to_i) # 出力 puts(ary)
Python解答例
# 解答例 # 入力 n, *ary = map(int, input().split()) # 出力 [print(num) for num in ary]
6-STEP4: 2 行目で与えられる N 個の整数の入力 (large) (paizaランク D 相当)
1行目で要素数nが与えられ、2行目のn個の文字列を半角スペースで分割して整数型に変換し、先頭から順に改行区切りで出力する問題です。
入出力例
# 入出力例 INPUT1 = <<~"EOS" good morning paiza EOS OUTPUT1 = <<~"EOS" good morning paiza EOS INPUT2 = <<~"EOS" 8 1 3 EOS OUTPUT2 = <<~"EOS" 8 1 3 EOS
Ruby解答例1
6-STEP2 と同じコードです。
# 解答例 # 1 行目の入力 n = gets.to_i # 2 行目の入力 ary = gets.split.map(&:to_i) # 出力 puts(ary)
Python解答例
# 解答例 # 1 行目の入力 n = int(input()) # 2 行目の入力 ary = [int(num) for num in input().split()] # 出力 [print(num) for num in ary]
6-FINAL: 【N 個の整数の入力】1 行目で与えられる N 個の整数の入力 (large) (paizaランク D 相当)
1行の半角スペース区切りでデータが与えられ、1個目の要素が要素数nで、2個目以降の要素が受け取りデータの時に、データを整数型に変換し、先頭から順に出力する問題です。
入出力例
# 入出力例 INPUT1 = <<~"EOS" 5 8 1 3 1 3 EOS OUTPUT1 = <<~"EOS" 8 1 3 1 3 EOS
Ruby解答例1
6-STEP3 と同じコードです。
# 解答例 # 入力 n, *ary = gets.split.map(&:to_i) # 出力 puts(ary)
Python解答例
# 解答例 # 入力 n, *ary = map(int, input().split()) # 出力 [print(num) for num in ary]
今回のまとめ
- 整数型への変換は、to_iメソッドを使う。
- 配列を一括で整数型に変換するときは、配列.map(&:to_i)を使う。
標準入力で整数値を受け取る問題を解いてみました。
次のセクション7では再び文字列のデータ入力を扱います!