今回はpaiza 標準入力メニューセクション9(ペアの入力)を解説します。
セクション9は、1行目でデータ数nが与えられ、続くn行のペアになったデータを受け取る問題です。
本記事で使用しているメソッドについて
解答例で使っているメソッドについて、下記の記事で詳しく解説していますので参考にしてみて下さい。
- [Ruby] 標準入力によるデータ取得1
- [Ruby] 標準入力によるデータ取得2
- [Ruby] 標準入力によるデータ取得3
- [Ruby] 標準出力(データを任意に整形して出力する)
- [Ruby]配列の基本操作1
- [Ruby]繰り返し処理
セクション9:【組になったデータの入力】文字列と整数の組からの選択
9-STEP1: 1 つの整数の組の入力 (paizaランク D 相当)
半角スペースで区切られた整数a, b を受け取り、半角スペースで連結して1行で出力する問題です。
入出力例
# 入出力例 INPUT1 = <<~"EOS" 8 13 EOS OUTPUT1 = <<~"EOS" 8 13 EOS
Ruby解答例
まず、半角スペースで区切られた2個の整数を受け取り、配列pairに格納します。
次に、配列pairの各要素(整数a, 整数b)を、.join(" ")
で半角スペースで連結した文字列を出力します。
# 解答例 # 入力 pair = gets.split.map(&:to_i) # 出力 puts(pair.join(" "))
Python解答例
# 解答例 # 入力 pair = [*map(int, input().split())] # 出力 print(*pair)
9-STEP2: N 組の整数の入力 (paizaランク D 相当)
1行目で要素数nが与えられ、続くn行の半角スペース区切りのペアのデータを整数型に変換して受け取り、先頭から順に改行区切りで出力する問題です。
入出力例
# 入出力例 INPUT1 = <<~"EOS" 5 813 813 8 13 81 1 81 3 8 813 EOS OUTPUT1 = <<~"EOS" 813 813 8 13 81 1 81 3 8 813 EOS
Ruby解答例1
1行目でデータ数nを受け取り、続くn行の文字列を半角スペースで分割し、整数型の要素数2個の配列にして、配列aryへ格納しています。
# 解答例1 # 1 行目入力 n = gets.to_i # 続く n 行入力 pairs = n.times.map { gets.split.map(&:to_i) } # 出力 pairs.each { |pair| puts(pair.join(" ")) }
Ruby解答例2
解答例1の整数型の要素数2個の配列を作る部分をわかりやすく書くと次のようになります。
# 解答例2 # 1 行目入力 n = gets.to_i # 続く n 行入力 pairs = [] n.times do # 半角スペースで分割して整数型に変換する pair = gets.split.map(&:to_i) # pairs に pair を追加する pairs.push(pair) end # 出力 pairs.each do |pair| puts(pair.join(" ")) end
Python解答例
# 解答例 # 1 行目入力 n = int(input()) # 続く n 行入力 pairs = [[*map(int, input().split())] for _ in range(n)] # 出力 [print(*pair) for pair in pairs]
9-STEP3: 整数の組からの選択 (paizaランク D 相当)
1行目で要素数nが与えられ、続くn行の半角スペース区切りのペアのデータを整数型に変換して受け取り、8番目のペアを出力する問題です。
入出力例
# 入出力例 INPUT1 = <<~"EOS" 10 813 813 8 13 81 1 81 3 8 813 8 138 813 8 83 18 8 13 88 88 EOS OUTPUT1 = <<~"EOS" 83 18 EOS
Ruby解答例
1行目でデータ数nを受け取り、続くn行の文字列を半角スペースで分割し、整数型の要素数2個の配列にして、配列aryへ格納し、8個目のペアを出力しています。
# 解答例 t = 8 # 1 行目入力 n = gets.to_i # 続く n 行入力 pairs = n.times.map { gets.split.map(&:to_i) } # t 個目の要素を参照 pair = pairs[t - 1] # 出力 puts(pair.join(" "))
Python解答例
# 解答例 t = 8 # 1 行目入力 n = int(input()) # 続く n 行入力 pairs = [[*map(int, input().split())] for _ in range(n)] # t 個目の要素を参照 pair = pairs[t - 1] # 出力 print(*pair)
9-STEP4: 文字列と整数の組の入力 (paizaランク D 相当)
1行目で要素数nが与えられ、続くn行の半角スペース区切りのペアのデータの1個目の要素を文字列、2個目の要素を整数型に変換して受け取り、先頭から順番に出力する問題です。
入出力例
# 入出力例 INPUT1 = <<~"EOS" 5 paiza 813 pa 81 8pa 13 iza 8 pa 13 EOS OUTPUT1 = <<~"EOS" paiza 813 pa 81 8pa 13 iza 8 pa 13 EOS
Ruby解答例1
1行目でデータ数nを受け取り、続くn行の文字列を半角スペースで分割し、2個目の要素を整数型に変換した配列にして、配列aryへ格納し、先頭から順に出力しています。
# 解答例 # 1 行目入力 n = gets.to_i # 続く n 行入力 pairs = n.times.map do s, a = gets.split [s, a.to_i] end # 出力 pairs.each { |pair| puts(pair.join(" ")) }
Python解答例
# 解答例 # 1 行目入力 n = int(input()) # 続く n 行入力 pairs = [] for _ in range(n): s, a = input().split() pairs.append([s, int(a)]) # 出力 [print(*pair) for pair in pairs]
9-FINAL: 【組になったデータの入力】文字列と整数の組からの選択 (paizaランク D 相当)
1行目で要素数nが与えられ、続くn行の半角スペース区切りのペアのデータの1個目の要素を文字列、2個目の要素を整数型に変換して受け取り、8番目のペアを出力する問題です
入出力例
# 入出力例 INPUT1 = <<~"EOS" 10 paiza 813 pa 81 8pa 13 iza 8 pa 13 pai 3 zi 8 pp 33 pa 8 pa 138 EOS OUTPUT1 = <<~"EOS" pp 33 EOS
Ruby解答例1
1行目でデータ数nを受け取り、続くn行の文字列を半角スペースで分割し、2個目の要素を整数型に変換した配列にして、配列aryへ格納し、8番目のペアを出力しています。
# 解答例 t = 8 # 1 行目入力 n = gets.to_i # 続く n 行入力 pairs = n.times.map do s, a = gets.split [s, a.to_i] end # t 個目の要素を参照 pair = pairs[t - 1] # 出力 puts(pair.join(" "))
Python解答例
# 解答例 t = 8 # 1 行目入力 n = int(input()) # 続く n 行入力 pairs = [] for _ in range(n): s, a = input().split() pairs.append([s, int(a)]) # t 個目の要素を参照 pair = pairs[t - 1] # 出力 print(*pair)
今回のまとめ
-
- 半角スペースで区切られたペアの値を受け取る
- 「整数と整数」のペアの場合、
.split.map(&:to_i)
で整数のペアの配列を作る - 「文字列と整数」のペアの場合、
.map { s, a = gets.split; [s, a.to_i] }
で文字列と整数のペアの配列を作る
- 「整数と整数」のペアの場合、
- 半角スペースで区切られたペアの値を受け取る
ペアのデータも扱うことが多いと思いますのでサクッと書けるように慣れておくと良いかもしれません。
次はラスト、セクション10は「行列」の受け取りです!