paiza プログラミング

[Ruby|Python]paiza 標準出力メニュー 【出力幅を指定して出力】

paiza_stdout_9

今回はpaiza 標準入力メニューセクション9【出力幅を指定して出力をRubyとPythonで解説します。

セクション9は、整数値の先頭部分に半角スペースや"0"を挿入して、任意の幅で出力する問題です。

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

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

セクション9:【出力幅を指定して出力】

9-STEP1: 1 つの実数を出力 (paizaランク D 相当)

1行で入力された整数n3桁になるように半角スペースで埋めて出力する問題です。(nは 0 以上 999 以下)

入出力例

※ 半角スペースだと見づらいため、半角スペース" "アンダースコア "_"に置き換えています。

# 入出力例
INPUT1 = <<~"EOS"
  12
EOS
OUTPUT1 = <<~"EOS"
  _12
EOS

INPUT2 = <<~"EOS"
  0
EOS
OUTPUT2 = <<~"EOS"
  __0
EOS
Ruby解答例1

入力文字列を整数nに変換し、%メソッドで、整数n半角スペース埋め3桁にした文字列を生成して出力しています。
※  "%3d" % n"%3d".%(n) を省略した書き方です。

# 解答例1
# 入力
n = gets.to_i
# 出力
puts("%3d" % n)
Ruby解答例2

入力文字列を整数nに変換し、sprintfメソッドで、整数n半角スペース埋め3桁にした文字列を生成して出力しています。

# 解答例2
# 入力
n = gets.to_i
# 出力
puts(sprintf("%3d", n))
Ruby解答例3

入力文字列を整数nに変換し、formatメソッドで、整数n半角スペース埋め3桁にした文字列を生成して出力しています。

# 解答例3
# 入力
n = gets.to_i
# 出力
puts(format("%3d", n))
Ruby解答例4

入力文字列を整数nに変換し、出力で整数nを文字列に変換して、rjustメソッド半角スペース埋め3桁にした文字列を生成して出力しています。(n.to_s.rjust(3, " " )n.to_s.rjust(3) でもOK)

# 解答例4
# 入力
n = gets.to_i
# 出力
puts(n.to_s.rjust(3, " "))
Ruby解答例5

入力文字列を整数nに変換し、整数nの桁数をカウントして、3桁になるように先頭に半角スペースを入れて出力しています。

# 解答例5
# 入力
n = gets.to_i
# 3 桁になるようにスペースで埋める
s = " " * (3 - n.to_s.length) << n.to_s
# 出力
puts(s)
Python解答例1

入力文字列を整数nに変換し、f文字列で、整数n半角スペース埋め3桁にした文字列を生成して出力しています。

# 解答例1
# 入力
n = int(input())
# 出力
print(f"{n:3d}")
Python解答例2

入力文字列を整数nに変換し、formatメソッドで、整数n半角スペース埋め3桁にした文字列を生成して出力しています。

# 解答例2
# 入力
n = int(input())
# 出力
print("{:{}d}".format(n, 3))
Python解答例3

入力文字列を整数nに変換し、出力で整数nを文字列に変換して、rjustメソッドで、整数n半角スペース埋め3桁にした文字列を生成して出力しています。(str(n).rjust(3, " " )str(n).rjust(3) でもOK)

# 解答例3
# 入力
n = int(input())
# 出力
print(str(n).rjust(3, " "))
Python解答例4

入力文字列を整数nに変換し、整数nの桁数をカウントして、3桁になるように先頭に半角スペースを入れて出力しています。

# 解答例4
# 入力
n = int(input())
# 3 桁になるようにスペースで埋める
s = " " * (3 - len(str(n))) + str(n)
# 出力
print(s)

 


9-STEP2: 数値をゼロ埋めで出力 (paizaランク D 相当)

1行で入力された整数n3桁になるように"0"で埋めて出力する問題です。(nは 0 以上 999 以下)

入出力例
# 入出力例
INPUT1 = <<~"EOS"
  12
EOS
OUTPUT1 = <<~"EOS"
  012
EOS

INPUT2 = <<~"EOS"
  0
EOS
OUTPUT2 = <<~"EOS"
  000
EOS
Ruby解答例1

入力文字列を整数nに変換し、%メソッドで、整数n0埋め3桁にした文字列を生成して出力しています。

# 解答例1
# 入力
n = gets.to_i
# 出力
puts("%03d" % n)
Ruby解答例2

入力文字列を整数nに変換し、sprintfメソッドで、整数n0埋め3桁にした文字列を生成して出力しています。

# 解答例2
# 入力
n = gets.to_i
# 出力
puts(sprintf("%03d", n))
Ruby解答例3

入力文字列を整数nに変換し、formatメソッドで、整数n0埋め3桁にした文字列を生成して出力しています。

# 解答例3
# 入力
n = gets.to_i
# 出力
puts(format("%03d", n))
Ruby解答例4

入力文字列を整数nに変換し、出力で整数nを文字列に変換して、rjustメソッドで、整数n0埋め3桁にした文字列を生成して出力しています。

# 解答例4
# 入力
n = gets.to_i
# 出力
puts(n.to_s.rjust(3, "0"))
Python解答例1

入力文字列を整数nに変換し、f文字列で、整数n0埋め3桁にした文字列を生成して出力しています。

# 解答例1
# 入力
n = int(input())
# 出力
print(f"{n:03d}")
Python解答例2

入力文字列を整数nに変換し、formatメソッドで、整数n0埋め3桁にした文字列を生成して出力しています。

# 解答例2
# 入力
n = int(input())
# 出力
print("{:0{}d}".format(n, 3))
Python解答例3

入力文字列を整数nに変換し、出力で整数nを文字列に変換して、rjustメソッドで、整数n0埋め3桁にした文字列を生成して出力しています。

# 解答例3
# 入力
n = int(input())
# 出力
print(str(n).rjust(3, "0"))

 


9-STEP3: 複数の数値を半角スペース埋めで出力 (paizaランク D 相当)

1行目で要素数n、続くn行で整数mが入力され、整数m3桁になるように半角スペースで埋めて出力する問題です。
(mは 0 以上 999 以下)

入出力例

※ 半角スペースだと見づらいため、半角スペース" "アンダースコア "_"に置き換えています。

# 入出力例
INPUT1 = <<~"EOS"
  12
  0
  8
  81
  813
  0
  0
  0
  0
  0
  0
  0
  0
EOS
OUTPUT1 = <<~"EOS"
  __0
  __8
  _81
  813
  __0
  __0
  __0
  __0
  __0
  __0
  __0
  __0
EOS
Ruby解答例1

1行目の整数n続くn行の整数mを整数に変換して受け取って配列aryに格納し、配列aryの先頭から順に、%メソッドで、整数m半角スペース埋め3桁にした文字列を生成して出力しています。

# 解答例1
# 1 行目入力
n = gets.to_i
# 続く n 行入力
ary = n.times.map { gets.to_i }
# 出力
ary.each { |m| puts("%3d" % m) }
Ruby解答例2

1行目の整数n続くn行の整数mを整数に変換して受け取って配列aryに格納し、配列aryの先頭から順に、sprintfメソッドで、整数m半角スペース埋め3桁にした文字列を生成して出力しています。

# 解答例2
# 1 行目入力
n = gets.to_i
# 続く n 行入力
ary = n.times.map { gets.to_i }
# 出力
ary.each { |m| puts(sprintf("%3d", m)) }
Ruby解答例3

1行目の整数n続くn行の整数mを整数に変換して受け取って配列aryに格納し、配列aryの先頭から順に、formatメソッドで、整数m半角スペース埋め3桁にした文字列を生成して出力しています。

# 解答例3
# 1 行目入力
n = gets.to_i
# 続く n 行入力
ary = n.times.map { gets.to_i }
# 出力
ary.each { |m| puts(format("%3d", m)) }
Ruby解答例4

1行目の整数n続くn行の整数mを整数に変換して受け取って配列aryに格納し、配列aryの先頭から順に、rjustメソッドで、整数m半角スペース埋め3桁にした文字列を生成して出力しています。(m.to_s.rjust(3, " " )m.to_s.rjust(3) でもOK)

# 解答例4
# 1 行目入力
n = gets.to_i
# 続く n 行入力
ary = n.times.map { gets.to_i }
# 出力
ary.each { |m| puts(m.to_s.rjust(3, " ")) }
Python解答例1

1行目の整数n続くn行の整数mを整数に変換して受け取って配列aryに格納し、配列aryの先頭から順に、f文字列で、整数m半角スペース埋め3桁にした文字列を生成して出力しています。

# 解答例1
# 1 行目入力
n = int(input())
# 続く n 行入力
ary = [int(input()) for _ in range(n)]
# 出力
[print(f"{m:3d}") for m in ary]
Python解答例2

1行目の整数n続くn行の整数mを整数に変換して受け取って配列aryに格納し、配列aryの先頭から順に、formatメソッドで、整数m半角スペース埋め3桁にした文字列を生成して出力しています。

# 解答例2
# 1 行目入力
n = int(input())
# 続く n 行入力
ary = [int(input()) for _ in range(n)]
# 出力
[print("{:{}d}".format(m, 3)) for m in ary]
Python解答例3

1行目の整数n続くn行の整数mを整数に変換して受け取って配列aryに格納し、配列aryの先頭から順に、rjustメソッドで、整数m半角スペース埋め3桁にした文字列を生成して出力しています。(n.to_s.rjust(3, " " )n.to_s.rjust(3) でもOK)

# 解答例2
# 1 行目入力
n = int(input())
# 続く n 行入力
ary = [int(input()) for _ in range(n)]
# 出力
[print("{:{}d}".format(m, 3)) for m in ary]

 

9-STEP4: 数値を M けた半角スペース埋めで出力 (paizaランク D 相当)

半角スペース区切りの整数n, mが入力され、整数nm桁になるように半角スペースで埋めて出力する問題です。
(nは 0 以上 999 以下、nの桁数 ≦ m)

入出力例

※ 半角スペースだと見づらいため、半角スペース" "アンダースコア "_"に置き換えています。

# 入出力例
INPUT1 = <<~"EOS"
  813 4
EOS
OUTPUT1 = <<~"EOS"
  _813
EOS

INPUT2 = <<~"EOS"
  813 8
EOS
OUTPUT2 = <<~"EOS"
  _____813
EOS
Ruby解答例1

整数n, m を受け取り、%メソッドで、整数n半角スペース埋めm桁にした文字列を生成して出力しています。(式展開で桁数を指定しています)

# 解答例1
# 入力
n, m = gets.split.map(&:to_i)
# 出力
puts("%#{m}d" % n)
Ruby解答例2

整数n, m を受け取り、%メソッドで、整数n半角スペース埋めm桁にした文字列を生成して出力しています。(%メソッドの引数を配列にして桁数を指定しています)

# 解答例2
# 入力
n, m = gets.split.map(&:to_i)
# 出力
puts("%*d" % [m, n])
Ruby解答例3

整数n, m を受け取り、sprintfメソッドで、整数n半角スペース埋めm桁にした文字列を生成して出力しています。

# 解答例3
# 入力
n, m = gets.split.map(&:to_i)
# 出力
puts(sprintf("%*d", m, n))
Ruby解答例4

整数n, m を受け取り、formatメソッドで、整数n半角スペース埋めm桁にした文字列を生成して出力しています。

# 解答例4
# 入力
n, m = gets.split.map(&:to_i)
# 出力
puts(format("%*d", m, n))
Ruby解答例5

整数n, m を受け取り、rjustメソッドで、整数n半角スペース埋めm桁にした文字列を生成して出力しています。(n.to_s.rjust(m, " " )n.to_s.rjust(m) でもOK)

# 解答例5
# 入力
n, m = gets.split.map(&:to_i)
# 出力
puts(n.to_s.rjust(m, " "))
Python解答例1

整数n, m を受け取り、f文字列で、整数n半角スペース埋めm桁にした文字列を生成して出力しています。

# 解答例1
# 入力
n, m = map(int, input().split())
# 出力
print(f"{n:{m}d}")
Python解答例2

整数n, m を受け取り、formatメソッドで、整数n半角スペース埋めm桁にした文字列を生成して出力しています。

# 解答例2
# 入力
n, m = map(int, input().split())
# 出力
print("{:{}d}".format(n, m))
Python解答例3

整数n, m を受け取り、rjustメソッドで、整数n半角スペース埋めm桁にした文字列を生成して出力しています。(str(n).rjust(m, " " )str(n).rjust(m) でもOK)

# 解答例3
# 入力
n, m = map(int, input().split())
# 出力
print(str(n).rjust(m, " "))

9-FINAL: 【出力幅を指定して出力】N 個の数値を M けた半角スペース埋めで出力 (paizaランク D 相当)

1行目で整数n, m、続くn行で整数a_iが入力され、各整数a_iをm桁になるように半角スペースで埋めて出力する問題です。
(a_iは 0 以上 999 以下、a_iの桁数 ≦ m)

入出力例

※ 半角スペースだと見づらいため、半角スペース" "アンダースコア "_"に置き換えています。

# 入出力例
INPUT1 = <<~"EOS"
  4 3
  0
  8
  81
  813
EOS
OUTPUT1 = <<~"EOS"
  __0
  __8
  _81
  813
EOS
Ruby解答例1

整数n, m と続くn行の整数の配列aryを受け取り、配列aryの先頭から順に、%メソッドで、整数a_i半角スペース埋めm桁にした文字列を生成して出力しています。(式展開で桁数を指定しています)

# 解答例1
# 1 行目入力
n, m = gets.split.map(&:to_i)
# 続く n 行入力
ary = n.times.map { gets.to_i }
# 出力
ary.each { |a| puts("%#{m}d" % a) }
Ruby解答例2

整数n, m と続くn行の整数の配列aryを受け取り、配列aryの先頭から順に、%メソッドで、整数a_i半角スペース埋めm桁にした文字列を生成して出力しています。(%メソッドの引数を配列にして桁数を指定しています)

# 解答例2
# 1 行目入力
n, m = gets.split.map(&:to_i)
# 続く n 行入力
ary = n.times.map { gets.to_i }
# 出力
ary.each { |a| puts("%*d" % [m, a]) }
Ruby解答例3

整数n, m と続くn行の整数の配列aryを受け取り、配列aryの先頭から順に、sprintfメソッドで、整数a_i半角スペース埋めm桁にした文字列を生成して出力しています。

# 解答例3
# 1 行目入力
n, m = gets.split.map(&:to_i)
# 続く n 行入力
ary = n.times.map { gets.to_i }
# 出力
ary.each { |a| puts(sprintf("%*d", m, a)) }
Ruby解答例4

整数n, m と続くn行の整数の配列aryを受け取り、配列aryの先頭から順に、formatメソッドで、整数a_i半角スペース埋めm桁にした文字列を生成して出力しています。

# 解答例4
# 1 行目入力
n, m = gets.split.map(&:to_i)
# 続く n 行入力
ary = n.times.map { gets.to_i }
# 出力
ary.each { |a| puts(format("%*d", m, a)) }
Ruby解答例5

整数n, m と続くn行の整数の配列aryを受け取り、配列aryの先頭から順に、rjustメソッドで、整数a_i半角スペース埋めm桁にした文字列を生成して出力しています。(a.to_s.rjust(m, " " )a.to_s.rjust(m) でもOK)

# 解答例5
# 1 行目入力
n, m = gets.split.map(&:to_i)
# 続く n 行入力
ary = n.times.map { gets.to_i }
# 出力
ary.each { |a| puts(a.to_s.rjust(m, " ")) }
Python解答例1

整数n, m と続くn行の整数の配列aryを受け取り、配列aryの先頭から順に、f文字列で、整数a_i半角スペース埋めm桁にした文字列を生成して出力しています。

# 解答例1
# 1 行目入力
n, m = map(int, input().split())
# 続く n 行入力
ary = [int(input()) for _ in range(n)]
# 出力
[print(f"{a:{m}d}") for a in ary]
Python解答例2

整数n, m と続くn行の整数の配列aryを受け取り、配列aryの先頭から順に、formatメソッドで、整数a_i半角スペース埋めm桁にした文字列を生成して出力しています。

# 解答例2
# 1 行目入力
n, m = map(int, input().split())
# 続く n 行入力
ary = [int(input()) for _ in range(n)]
# 出力
[print("{:{}d}".format(a, m)) for a in ary]
Python解答例3

整数n, m と続くn行の整数の配列aryを受け取り、配列aryの先頭から順に、rjustメソッドで、整数a_i半角スペース埋めm桁にした文字列を生成して出力しています。(str(a).rjust(m, " " )str(a).rjust(m) でもOK)

# 解答例3
# 1 行目入力
n, m = map(int, input().split())
# 続く n 行入力
ary = [int(input()) for _ in range(n)]
# 出力
[print(str(a).rjust(m, " ")) for a in ary]

今回のまとめ

整数nから半角スペースm桁埋めの文字列sを生成するにはいろいろな方法がある。

Ruby
  • s = "%#{m}d" % n
  • s = "%*d" % [m, n]
  • s = sprintf("%*d", m, n)
  • s = format("%*d", m, n)
  • s = n.to_s.rjust(m, " ")
Python
  • s = f"{n:{m}d}"
  • s = "{:{}d}".format(n, m)
  • s = str(n).rjust(m, " ")

セクション9では整数の0埋め、半角スペース埋めを扱いました。
色々な方法がありましたが、とりあえずはどれか一つを覚えて使っていけばよいと思います。
次のセクションは表形式のデータを任意の出力形式で出力する問題です!



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


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






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







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







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







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


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

© 2024 じゃいごテック