paiza プログラミング

[Ruby|Python]paiza 標準出力メニュー 【半角スペース区切りの出力】

paiza_stdout_2

今回はpaiza 標準入力メニューセクション2【半角スペース区切りの出力】を解説します。

セクション2は、指定された整数値を半角スペース区切りで出力する問題です。

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

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

セクション2:【半角スペース区切りの出力】

2-STEP1: 2 つの数値を出力 (paizaランク D 相当)

2個の整数 1, 1 半角スペース区切りで出力する問題です。

Ruby解答例1

式展開を使って文字列の中に変数の値を埋め込み、putsメソッドで出力しています。
式展開では数値は自動的に文字列に変換されるので、to_sメソッドは必要ありません。

# 解答例1
n1 = 1
n2 = 1
# 出力
puts("#{n1} #{n2}")
Ruby解答例2

to_sメソッドで整数を文字列に変換してから、 + で文字列を連結して出力しています。

# 解答例2
n1 = 1
n2 = 1
# 文字列に変換
s1 = n1.to_s
s2 = n2.to_s
# 出力
puts(s1 + " " + s2)
Python解答例1

f文字列を使って、文字列の中に変数の値を埋め込み、printメソッドで出力しています。

# 解答例1
n1 = 1
n2 = 1
# 出力
print(f"{n1} {n2}")
Python解答例2

strメソッドで整数を文字列に変換してから、 + で文字列を連結して出力しています。

# 解答例2
n1 = 1
n2 = 1
# 文字列に変換
s1 = str(n1)
s2 = str(n2)
# 出力
print(s1 + " " + s2)

 


2-STEP2: 3 つの数値を出力 (paizaランク D 相当)

3個の整数 8, 1, 3 半角スペース区切りで出力する問題です。

Ruby解答例1

式展開を使って文字列の中に変数の値を埋め込み、putsメソッドで出力しています。(STEP1と同じ解き方)

# 解答例1
n1 = 8
n2 = 1
n3 = 3
# 出力
puts("#{n1} #{n2} #{n3}")
Ruby解答例2

to_sメソッドで整数を文字列に変換してから、 + で文字列を連結して出力しています。(STEP1と同じ解き方)

# 解答例2
n1 = 8
n2 = 1
n3 = 3
# 文字列に変換
s1 = n1.to_s
s2 = n2.to_s
s3 = n3.to_s
# 出力
puts(s1 + " " + s2 + " " + s3)
Python解答例1

f文字列を使って、文字列の中に変数の値を埋め込み、printメソッドで出力しています。(STEP1と同じ解き方)

# 解答例1
n1 = 8
n2 = 1
n3 = 3
# 出力
print(f"{n1} {n2} {n3}")
Python解答例2

strメソッドで整数を文字列に変換してから、 + で文字列を連結して出力しています。

# 解答例2
n1 = 8
n2 = 1
n3 = 3
# 文字列に変換
s1 = str(n1)
s2 = str(n2)
s3 = str(n3)
# 出力
print(s1 + " " + s2 + " " + s3)

 


2-STEP3: 10 個の数値を出力 (末尾に半角スペース有) (paizaランク D 相当)

1 から 10 までの整数の後ろに半角スペースを追加して連結し、1行で出力する問題です。
※ 末尾に半角スペースが入ります。

Ruby解答例1

要素が 1 から 10配列aryを作成し、joinメソッド配列aryの各要素を半角スペースで連結、末尾に半角スペースを追加して出力しています。

# 解答例1
# 1 から 10 までの配列 ary を作成
# ary = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
ary = (1..10).to_a
# 出力 (末尾に半角スペース有)
puts(ary.join(" ") + " ")
Ruby解答例2

要素が 1 から 10配列ary空の文字列sを作成し、配列aryの先頭から順に参照して文字列に変換して、半角スペースと一緒に文字列sに追加しています。

# 解答例2
# 1 から 10 までの配列 ary を作成
ary = (1..10).to_a
# 配列 ary の先頭から順に文字列に変換して半角スペースを追加して
# 文字列 s に追加する (末尾に半角スペース有)
s = ""
ary.each do |num|
  s += num.to_s + " "
end
# 出力
puts(s)
Python解答例1

要素が 1 から 10配列aryを作成し、joinメソッド配列aryの各要素を文字列に変換して半角スペースで連結、末尾に半角スペースを追加して出力しています。

# 解答例1
# 1 から 10 までの配列 ary を作成
# ary = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
ary = list(range(1, 11))
# 出力 (末尾に半角スペース有)
print(" ".join(map(str, ary)) + " ")
Python解答例2

要素が 1 から 10配列ary空の文字列sを作成し、配列aryの先頭から順に参照して文字列に変換して、半角スペースと一緒に文字列sに追加しています。

# 解答例2
# 1 から 10 までの配列 ary を作成
ary = list(range(1, 11))
# 配列 ary の先頭から順に文字列に変換して半角スペースを追加して
# 文字列 s に追加する (末尾に半角スペース有)
s = ""
for num in ary:
    s += str(num) + " "
# 出力
print(s)

 


2-STEP4: 10 個の数値を出力 (paizaランク D 相当)

1 から 10 までの整数を半角スペース区切りで出力する問題です。
※ 末尾に半角スペースは入りません。

Ruby解答例1

要素が 1 から 10配列aryを作成し、joinメソッド配列aryの各要素を半角スペースで連結して出力しています。

# 解答例1
# 1 から 10 までの 配列ary を生成
# ary = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
ary = (1..10).to_a
# 出力
puts(ary.join(" "))
Ruby解答例2

要素が 1 から 10配列ary空の文字列sを作成し、配列aryの先頭から順に参照して文字列に変換します。
文字列sに文字列にした要素を追加し、最後の要素までは半角スペースも追加します。

# 解答例2
n = 10
# 1 から 10 まで 1 ずつ増やしながら繰り返す
s = ""
1.upto(n) do |num|
  s += n.to_s
  # 最後の数字にはスペースを追加しない
  break if num == n
  s += " "
end
Python解答例1

要素が 1 から 10配列aryを作成し、print(*ary)でアンパックして出力しています。
アンパックして出力すると、配列の要素を半角スペース区切りで出力してくれます。

# 入出力例1
# 1 から 10 までの 配列ary を生成
# ary = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
ary = list(range(1, 11))
# 出力
print(*ary)
Python解答例2

要素が 1 から 10配列aryを作成し、joinメソッドで半角スペース区切りで出力しています。
joinメソッドを使うには要素を文字列に変換する必要があります。)

# 入出力例2
# 1 から 10 までの 配列ary を生成
# ary = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
ary = list(range(1, 11))
# 出力
print(" ".join(map(str, ary)))
Python解答例3

要素が 1 から 10配列ary空の文字列sを作成し、配列aryの先頭から順に参照して文字列に変換します。
文字列sに文字列にした要素を追加し、最後の要素までは半角スペースも追加します。

# 入出力例3
# 1 から 10 まで 1 ずつ増やしながら繰り返す
s = ""
for num in range(1, 11):
    s += str(num)
    # 最後の数字にはスペースを追加しない
    if num == 10:
        break
    s += " "
# 出力
print(s)

 


2-FINAL: 【半角スペース区切りの出力】1,000 個の数値を出力 (paizaランク D 相当)

1 から 1000 までの整数を半角スペース区切りで出力する問題です。
※ 末尾に半角スペースは入りません。

Ruby解答例1

要素が 1 から 1000配列aryを作成し、joinメソッド配列aryの各要素を半角スペースで連結して出力しています。

# 入出力例1
# 1 から 1000 までの配列 ary を生成
# ary = [1, 2, 3, ... 998, 999, 1000]
ary = (1..1000).to_a
# 出力
puts(ary.join(" "))
Ruby解答例2

要素が 1 から 1000配列ary空の文字列sを作成し、配列aryの先頭から順に参照して文字列に変換します。
文字列sに文字列にした要素を追加し、最後の要素までは半角スペースも追加します。

# 入出力例2
# 1 から 1000 まで 1 ずつ増やしながら繰り返す
s = ""
1.upto(1000) do |num|
  s += num.to_s
  # 最後の数字にはスペースを追加しない
  break if n == 1000
  s += " "
end
# 出力
puts(s)
Python解答例1

要素が 1 から 1000配列aryを作成し、print(*ary)でアンパックして出力しています。

# 入出力例1
# 1 から 1000 までの配列 ary を生成
# ary = [1, 2, 3, ... 998, 999, 1000]
ary = list(range(1, 1001))
# 出力
print(*ary)
Python解答例2

要素が 1 から 1000配列aryを作成し、joinメソッドで半角スペース区切りで出力しています。

# 入出力例2
# 1 から 1000 までの 配列ary を生成
# ary = [1, 2, 3, ... 998, 999, 1000]
ary = list(range(1, 1001))
# 出力
print(" ".join(map(str, ary)))
Python解答例3

要素が 1 から 1000配列ary空の文字列sを作成し、配列aryの先頭から順に参照して文字列に変換します。
文字列sに文字列にした要素を追加し、最後の要素までは半角スペースも追加します。

# 入出力例3
# 1 から 1000 まで 1 ずつ増やしながら繰り返す
s = ""
for num in range(1, 1001):
    s += str(num)
    # 最後の数字にはスペースを追加しない
    if num == 1000:
        break
    s += " "
# 出力
print(s)

今回のまとめ

Ruby
  • 要素数が数個かつ要素数が固定の場合は式展開( #{} )を使う
  • 要素数が多い場合や要素数が不定の場合はjoinメソッドを使う
Python
  • 要素数が数個かつ要素数が固定の場合はf文字列( f"" )を使う
  • 要素数が多い場合や要素数が不定の場合はjoinメソッドを使う
  • 配列の要素を半角スペース区切りで出力する場合はアンパック(*配列)を使う

今回は整数値の半角スペース区切り出力を扱いました。
次は文字列の半角スペース区切り・改行区切りの問題です。セクション1,2で必要だった型変換が無い分楽だと思います!



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


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






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







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







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







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


-paiza, プログラミング
-

© 2024 じゃいごテック