2
0

AtCoder Beginners SelectionにPythonで挑戦してみた B問題編

Posted at

はじめに

普段は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を使えたので楽しめました、

いつかソースをブラッシュアップしたいし、
今後も継続して挑戦していきたいです。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0