はじめに
普段はSQLしか書いていないので、
Pythonの勉強がてらAtCoderに挑戦してみました。
自分の解答内容と軽い説明を記載します。
一応ACとれていますが、通っただけレベルのコードです。
きれいな正解を探している方は別のサイトをお勧めします。
そのうちメモリが軽い、コード量が少ない解答を見つけては
反省会したいと思います。
さすがにA問題は割愛します。
B問題
ABC081B - Shift only
ABC081B.py
a = int(input())
numbers = list(map(int, input().split()))
res = 0
while True:
even = []
for number in numbers:
if number % 2 == 1:
break
else:
even.append(number / 2)
if len(even) == a:
res += 1
numbers = even[:]
else:
break
print(res)
とりあえず問題通り実装。
2で割った配列を作成しなおして、2で割れ無くなるまで繰り返す。
もっとやりようがあると思う。
関数作って再帰的に作るとスマートなのかもしれません。
ABC087B - Coins
ABC087B.py
mount_500 = int(input())
mount_100 = int(input())
mount_50 = int(input())
sum = int(input())
res = 0
for x in range(0, mount_500 + 1):
if x * 500 > sum:
break
else:
for y in range(0, mount_100 + 1):
if x * 500 + y * 100 > sum:
break
else:
for z in range(0, mount_50 + 1):
if x * 500 + y * 100 + z * 50 > sum:
break
elif x * 500 + y * 100 + z * 50 == sum:
res += 1
# output
print(res)
金額全探索です。
合計値超えた場合は探索をやめるぐらいしか工夫していないです。
ABC083B - Some Sums
ABC083B.py
n, a, b = map(int, input().split())
res = 0
for x in range(1, n + 1):
d = 0
for y in str(x):
d += int(y)
if a <= d <= b:
res += x
print(res)
これも問題文通りの実装です。
数値を文字に置き換えて各桁の合計値(d)を作ってます。
ABC088B - Card Game for Two
ABC088B.py
n = input()
card_numbers = list(map(int, input().split()))
alice_points = 0
bob_points = 0
sorted_card_numbers = sorted(card_numbers, reverse=True)
i = 0
for number in sorted_card_numbers:
if i % 2 == 0:
alice_points += number
else:
bob_points += number
i += 1
print(alice_points - bob_points)
Aliceから開始するのが決まっていますので、
カードの数値を降順に並べて
Aliceから順番に取っていくようにしました。
ABC085B - Kagami Mochi
ABC085B.py
N = int(input()) # 最初の行の入力を受け取る
numbers = []
for _ in range(N):
d = int(input()) # 2行目以降の入力を受け取る
numbers.append(d)
numbers_sorted = sorted(numbers)
number_before = 0
res = 0
for number in numbers_sorted:
if number > number_before:
res += 1
number_before = number
print(res)
問題文通り実装。
if number > number_before
のところはもう少しスマートに書き直せそうです。
おわり
変数名など仕事だと使えないレベルの内容ですが、
業務では使わないPythonを使えたので楽しめました、
いつかソースをブラッシュアップしたいし、
今後も継続して挑戦していきたいです。