paiza プログラミング

[Ruby|Python]paiza 標準入力メニュー セクション4~6(整数)

paiza_stdin_4-6

今回はpaiza 標準入力メニューセクション4~6(整数値の入力)を解説します。

セクション4は、複数行の入力データを整数値で受け取る問題です。

セクション5は、半角スペース区切りの入力データがあった場合に半角スペースで分割して、各要素の文字列を整数値で受け取る問題です。

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

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

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

セクション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=10n=100 にします。

# 解答例1
n = 100
# 入力
ary = n.times.map { gets.to_i }
# 出力
puts(ary)
Ruby解答例2

STEP3 解答例2の n=10n=100 にします。

# 解答例2
n = 100
# 入力
ary = []
n.times do
  ary.push(gets.to_i)
end
# 出力
puts(ary)
Python解答例

STEP3 解答例の n=10n=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=10n=1000 にします。

# 解答例1
n = 1000
# 入力
ary = n.times.map { gets.to_i }
# 出力
puts(ary)
Ruby解答例2

STEP3 解答例2の n=10n=1000 にします。

# 解答例2
n = 1000
# 入力
ary = []
n.times do
  ary.push(gets.to_i)
end
# 出力
puts(ary)
Python解答例

STEP3 解答例の n=10n=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では再び文字列のデータ入力を扱います!



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


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






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







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







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







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


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

© 2024 じゃいごテック