paiza プログラミング

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

paiza_stdin_7

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

セクション7は、1行目で要素数nが与えられ、続くn行の文字列を受け取る問題と、1行目または1要素目要素数nが与えられ、半角スペース区切りの文字列を受け取る問題です。

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

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

セクション7:【N個の文字列の入力】1 行目で与えられる N 個の文字列の入力 (large)

7-STEP1: 改行区切りでの N 個の文字列の入力 (paizaランク D 相当)

1行目でデータ数nが与えられ、続くn行の入力データを受け取り、データの先頭から順に出力する問題です。

入出力例
# 入出力例
INPUT1 = <<~"EOS"
  5
  hello
  paiza
  813
  paiza2020
  Nice
EOS
OUTPUT1 = <<~"EOS"
  hello
  paiza
  813
  paiza2020
  Nice
EOS
Ruby解答例

まず、1行目の入力を受け取り、整数に変換し変数nに格納します。
次に、n.timesn回のループを設定し、.map{ gets.chomp } で入力データの末尾の改行を削除した文字列を、配列aryに格納します。

# 解答例
# 1 行目入力
n = gets.to_i
# 続く n 行入力
ary = n.times.map { gets.chomp }
# 出力
puts(ary)
Python解答例
# 解答例
# 1 行目入力
n = int(input())
# 続く n 行入力
ary = [input() for _ in range(n)]
# 出力
[print(s) for s in ary]

 


7-STEP2: 2 行目で与えられる N 個の文字列の入力 (paizaランク D 相当)

1行目で要素数nが与えられ、2行目のn個の文字列を半角スペースで分割して受け取り、先頭から順に改行区切りで出力する問題です。

入出力例
# 入出力例
INPUT1 = <<~"EOS"
  5
  paiza 813 paiza813 hello813 good
EOS
OUTPUT1 = <<~"EOS"
  paiza
  813
  paiza813
  hello813
  good
EOS
Ruby解答例1

1行目で要素数nが与えられますが、2行目の文字列を半角スペースで分割すると自動的にn個になるため、そのまま配列aryへ格納しています。

# 解答例
# 1 行目入力
n = gets.to_i
# 2 行目入力
ary = gets.split
# 出力
puts(ary)
Python解答例
# 解答例
# 1 行目入力
n = int(input())
# 2 行目入力
ary = input().split()
# 出力
[print(s) for s in ary]

 


7-STEP3: 1 行目で与えられる N 個の文字列の入力 (paizaランク D 相当)

1行の半角スペース区切りでデータが与えられ、1個目の要素を要素数n、2個目以降を文字列のデータとして受け取り、先頭から順に出力する問題です。

入出力例
# 入出力例
INPUT1 = <<~"EOS"
  5 paiza 813 paiza813 Hello World!
EOS
OUTPUT1 = <<~"EOS"
  paiza
  813
  paiza813
  Hello
  World!
EOS
Ruby解答例1

半角スペースで分割した文字列の1個目の要素を _、2個目以降の要素を ary へ格納しています。
※ この問題で1個目の要素は使わないので _ に代入して捨てています。

# 解答例
# 入力
_, *ary = gets.split
# 出力
puts(ary)
Ruby解答例2

1個目の要素は使いませんが、整数型で受け取る場合、次のようになります。

# 解答例2
# 入力
ary = gets.split
n = ary.shift.to_i
# 出力
puts(ary)
Python解答例
# 解答例
# 入力
_, *ary = input().split()
# 出力
[print(s) for s in ary]

 


7-STEP4: 2 行目で与えられる N 個の文字列の入力 (large) (paizaランク D 相当)

1行目で要素数nが与えられ、2行目のn個の文字列を半角スペースで分割して受け取り、先頭から順に改行区切りで出力する問題です。

入出力例
# 入出力例
INPUT1 = <<~"EOS"
  5
  813 paiza pa13 Hello World!
EOS
OUTPUT1 = <<~"EOS"
  813
  paiza
  pa13
  Hello
  World!
EOS
Ruby解答例1

7-STEP2 と同じコードです。

# 解答例
# 1 行目入力
n = gets.to_i
# 2 行目入力
ary = gets.split
# 出力
puts(ary)
Python解答例
# 解答例
# 1 行目入力
n = int(input())
# 2 行目入力
ary = input().split()
# 出力
[print(s) for s in ary]

 


7-FINAL: 【N個の文字列の入力】1 行目で与えられる N 個の文字列の入力 (large) (paizaランク D 相当)

1行の半角スペース区切りでデータが与えられ、1個目の要素を要素数n、2個目以降を文字列のデータとして受け取り、先頭から順に出力する問題です。

入出力例
# 入出力例
INPUT1 = <<~"EOS"
  5 813 paiza 8iza Hello Paiza!
EOS
OUTPUT1 = <<~"EOS"
  813
  paiza
  8iza
  Hello
  Paiza!
EOS
Ruby解答例1

7-STEP3 解答例1と同じコードです。

# 解答例1
# 入力
_, *ary = gets.split
# 出力
puts(ary)
Ruby解答例2

7-STEP3 解答例2と同じコードです。

# 解答例2
# 入力
ary = gets.split
n = ary.shift.to_i
# 出力
puts(ary)
Python解答例
# 解答例
# 入力
_, *ary = input().split()
# 出力
[print(s) for s in ary]

今回のまとめ

  • 1行目で入力行数n続くn行で入力データが与えられる場合
    • 1行目の入力行数nを整数型で受け取り、n回のループで続くn行の入力を受け取る
  • 半角スペース区切りのデータが与えられ、1個目の要素に要素数nが与えられた場合
    • n, *ary = gets.split で1個目の要素と2個目以降の要素を分けて受け取る
    • ary = gets.split で全ての要素と受け取った後、ary.shift で1個目の要素を取り出す

セクション1~7では基本的な文字列・整数型のデータ受け取りを学習しました。
次のセクション8は小数点数ですが、今回とほぼ同様のコードで受け取ることが出来ます。



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


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






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







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







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







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


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

© 2024 じゃいごテック