paiza プログラミング

[Ruby|Python]paiza 標準入力メニュー セクション10(行列)

paiza_stdin_10

今回はpaiza 標準入力メニューセクション10(行列の入力)を解説します。

セクション10は、行数n、列数mが与えられ、続くn行、半角スペース区切りの要素数m個の二次元配列データを受け取る問題です。

本記事で使用しているメソッドについて

解答例で使っているメソッドについて、下記の記事で詳しく解説していますので参考にしてみて下さい。

セクション10:【N 行 M 列のデータの入力】行ごとに要素数の異なる整数列の入力 (paizaランク D 相当)

10-STEP1: 3 行 3 列の整数の入力 (paizaランク D 相当)

3行で各行が半角スペースで区切られた3個のデータを整数型で受け取る問題です。

入出力例
# 入出力例
INPUT1 = <<~"EOS"
  8 1 3
  1 2 3
  3 1 8
EOS
OUTPUT1 = <<~"EOS"
  8 1 3
  1 2 3
  3 1 8
EOS
Ruby解答例1

入力ではh.times3回のループを設定し、.map{ gets.split.map(&:to_i) }で各行を半角スペースで分割し整数型に変換して配列aryに追加しています。

出力はary.map { 各行の処理 }.join("\n")で各行を改行で連結した文字列に変換しており、各行の処理はrow.join(" ")で各要素を半角スペースで連結しています。

# 解答例1
h = 3
# 入力
ary = h.times.map { gets.split.map(&:to_i) }
# 出力
puts(ary.map { |row| row.join(" ") }.join("\n"))
Ruby解答例2

解答例1の処理を少し分割して書くと次のようになります。

# 解答例2
h = 3
# 入力
ary = []
h.times do
  # 1行分の要素を半角スペースで分割
  row = gets.split.map(&:to_i)
  # ary に追加
  ary.push(row)
end
# 出力
ary.each do |row|
  puts(row.join(" "))
end
Python解答例
# 解答例
h = 3
# 入力
ary = [[*map(int, input().split())] for _ in range(h)]
# 出力
[print(*row) for row in ary]

 


10-STEP2: N 行 3 列の整数の入力 (paizaランク D 相当)

1行目で行数nが与えられ、続くn行で各行が半角スペースで区切られた3個のデータを整数型で受け取る問題です。

入出力例
# 入出力例
INPUT1 = <<~"EOS"
  2
  1 2 3
  8 1 3
EOS
OUTPUT1 = <<~"EOS"
  1 2 3
  8 1 3
EOS
Ruby解答例

1行目で行数nを受け取れば、あとはSTEP1と同じコードです。

# 解答例
# 1 行目入力
n = gets.to_i
# 続く n 行入力
ary = n.times.map { gets.split.map(&:to_i) }
# 出力
puts(ary.map { |row| row.join(" ") }.join("\n"))
Python解答例
# 解答例
# 1 行目入力
n = int(input())
# 続く n 行入力
ary = [[*map(int, input().split())] for _ in range(n)]
# 出力
[print(*row) for row in ary]

 


10-STEP3: 3 行 M 列の整数の入力 (paizaランク D 相当)

1行目で列数mが与えられ、続く3行で各行が半角スペースで区切られたm個のデータを整数型で受け取る問題です。

入出力例
# 入出力例
INPUT1 = <<~"EOS"
  5
  1 2 3 4 5
  8 1 3 8 1
  813 138 381 183 831
EOS
OUTPUT1 = <<~"EOS"
  1 2 3 4 5
  8 1 3 8 1
  813 138 381 183 831
EOS
Ruby解答例

行数n=3で固定なので、1行目で列数mを受け取れば、あとはSTEP1と同じコードです。
なお、列数mを受け取っていますが、その後の処理で使われていません。

# 解答例
n = 3
# 1 行目入力
m = gets.to_i
# 続く n 行入力
ary = n.times.map { gets.split.map(&:to_i) }
# 出力
puts(ary.map { |row| row.join(" ") }.join("\n"))
Python解答例
# 解答例
n = 3
# 1 行目入力
m = int(input())
# 続く n 行入力
ary = [[*map(int, input().split())] for _ in range(n)]
# 出力
[print(*row) for row in ary]

 


10-STEP4: N 行 M 列の整数の入力 (paizaランク D 相当)

1行目で行数n, 列数mが半角スペース区切りで与えられ、続くn行で各行が半角スペースで区切られたm個のデータを整数型で受け取る問題です。

入出力例
# 入出力例
INPUT1 = <<~"EOS"
  2 3
  1 2 3
  8 1 3
EOS
OUTPUT1 = <<~"EOS"
  1 2 3
  8 1 3
EOS
Ruby解答例

1行目で行数n, 列数mを受け取れば、あとはSTEP1と同じコードです。
STEP3と同様、列数mを受け取っていますが、その後の処理で使われていません。

# 解答例
# 1 行目入力
n, m = gets.split.map(&:to_i)
# 続く n 行入力
ary = n.times.map { gets.split.map(&:to_i) }
# 出力
puts(ary.map { |row| row.join(" ") }.join("\n"))
Python解答例
# 解答例
# 1 行目入力
n, m = map(int, input().split())
# 続く n 行入力
ary = [[*map(int, input().split())] for _ in range(n)]
# 出力
[print(*row) for row in ary]

 


10-FINAL: 【N 行 M 列のデータの入力】行ごとに要素数の異なる整数列の入力 (paizaランク D 相当)

1行目で行数nが与えられ、続くn行の半角スペース区切りデータの2個目以降の要素を整数型の配列変換して受け取る問題です。
※ 2行目以降の1個目の要素は各行の要素数mですが、今までの問題から使用しないことがわかっています。

入出力例
# 入出力例
INPUT1 = <<~"EOS"
  3
  1 8
  2 8 1
  3 8 1 3
EOS
OUTPUT1 = <<~"EOS"
  8
  8 1
  8 1 3
EOS
Ruby解答例

1行目でデータ数nを受け取ります。
続くn行では半角スペースで要素を分割し、2個目以降の要素を整数型に変換した配列に変換して配列aryに追加します。

# 解答例
# 1 行目入力
n = gets.to_i
# 続く n 行入力
ary = n.times.map { gets.split[1..].map(&:to_i) }
# 出力
puts(ary.map { |row| row.join(" ") }.join("\n"))
Python解答例
# 解答例
# 1 行目入力
n = int(input())
# 続く n 行入力
ary = [[*map(int, input().split()[1:])] for _ in range(n)]
# 出力
[print(*row) for row in ary]

今回のまとめ

N行M列で、各行が半角スペースで区切られた入力データを受け取るときは、行数Nのループを設定し、各行を半角スペースで分割し、配列に追加していく。
このとき、列数Mが分からなくてもデータを受け取ることができる。

色々なパターンのデータ受け取りがありましたが、共通コードで解ける問題が多かったですね。



【PR】アルゴリズム学習でお世話になった本


アルゴリズム関連の技術書は大抵C/C++で書かれていますが、ある程度プログラムが出来れば、処理の流れは理解することが出来ます。






通称: 螺旋本。C++で解説されています。AOJ(Aizu Online Judge)を運営している会津大学の渡辺准教授が書いた本です。データ構造や計算量の内容から丁寧に書いてありますのでアルゴリズム学習の最初の参考書としてオススメです。







通称: 蟻本。C++で解説されています。競技プログラミング中級者の定番書と言われていて、競技プログラミングで利用できる色々なアルゴリズムを学ぶことが出来ます。かなり高度な内容も含まれているので1冊分を完全に理解するのにはかなりの時間がかかりそうですが、手元に置いて何度も読み返しています。







通称: チーター本。C#, C++, JAVAでTopcoderの問題を解説しています。初心者~中級者向けに書かれているので解説が非常に丁寧です。







Python3でアルゴリズムを解説している本です。講義スタイルの本で、図やフローチャートを使ってアルゴリズムとデータ構造についてしっかりと説明されています。代わりにコードは少なめです。Pythonコードが読めなくても十分理解できると思います。


-paiza, プログラミング
-,

© 2024 じゃいごテック