AtCoder APG4bをPythonで解く(Ex16~18)

投稿日:  更新日:2022/09/02

Atcoder Python

B!
Daniel AgreloによるPixabay(https://pixabay.com/)からの画像

こんにちは, Shinoryoです.

今回はC++入門 AtCoder Programming Guide for beginners(APG4b)を, Pythonで無理やり解いてみた結果を書き連ねていこうと思います.

EX16 - 隣り合う同じ値を探す

問題にあるプログラムをPythonで記述すると, 次のようになるでしょうか.

data = [int(x) for x in input().split()]
# The program should be written here.

隣り合う数値が等しいかどうかを判定するプログラムを, 入力した数値のリストの「0番目と1番目」「1番目と2番目」「2番目と3番目」「3番目と4番目」に対して繰り返せばよいでしょう. for文での繰り返しがrange(4)となることに注意してください. 隣り合う数値が等しくなったらbool型の変数ansにTrueを代入することで, 隣り合う数値があったかどうかを記録しています.

data = [int(x) for x in input().split()]
ans = False
for i in range(4):
if data[i] == data[i+1]:
ans = True
if ans:
print("YES")
else:
print("NO")

EX17 - 果物屋さんでお買い物

問題にあるプログラムをPythonで記述すると, 次のようになるでしょうか.

n, s = [int(x) for x in input().split()]
a = [int(x) for x in input().split()]
p = [int(x) for x in input().split()]
# The program should be written here.

2重ループを使えば次のように書けます. i番目のリンゴとj番目のパイナップルの値段の合計を求めて, それがSと一致するかどうかを判別します.

n, s = [int(x) for x in input().split()]
a = [int(x) for x in input().split()]
p = [int(x) for x in input().split()]
ans = 0
for i in range(n):
for j in range(n):
if a[i] + p[j] == s:
ans += 1
print(ans)

EX18 - ゲーム大会

問題にあるプログラムをPythonで記述すると, 次のようになるでしょうか.

n, m = [int(x) for x in input().split()]
# The program should be written here.

2次元配列の入力は, 「data = [[int(x) for x in input().split()] for _ in range(m)]」のように, 今までの入力受付を二重にすることで受け付けられます. また, 全ての要素が「-」である2次元配列を「ans = [["-"]*n for i in range(n)]」で作成しています. 途中の「data[i][0] -= 1」等では, Pythonなどのプログラミング言語の要素の番号が0から始まるので, それに合わせて入力データを補正しています. 各行の行末に空白を含まないことに注意して, 出力の部分はif文で場合分けを行ってください.

n, m = [int(x) for x in input().split()]
data = [[int(x) for x in input().split()] for _ in range(m)]
ans = [["-"]*n for i in range(n)]
for i in range(m):
data[i][0] -= 1
data[i][1] -= 1
ans[data[i][0]][data[i][1]] = "o"
ans[data[i][1]][data[i][0]] = "x"
for i in range(n):
for j in range(n):
if j == n-1:
print(ans[i][j])
else:
print(ans[i][j], end=" ")

参考にしたサイト等

関連記事

Search

About Me

自分の写真
理系大学生でした. Bloggerを利用して発信を行っています.

Labels

Blog Archives