AtCoder Beginners Selection
初心者向けの問題が10問厳選されており、始めるにはもってこいの問題集。
いろんな方が、書いてますが自分も取り組んでみた感想を書きます。
以下自己解答。
他にも色々な解法があるのですが、自分が解けた(答えを見て理解できた)範囲で書きます。
PracticeA - Welcome to AtCoder
# -*- coding: utf-8 -*-
# 整数の入力
a = int(input())
# スペース区切りの整数の入力
b, c = map(int, input().split())
# 文字列の入力
s = input()
# 出力
print(a+b+c,s)
ABC086A - Product
a,b= map(int,input().split())
if (a*b)%2:
print('Odd')
else:
print('Even')
ABC081A - Placing Marbles
s = str(input())
cnt = 0
for i in s:
if i == '1':
cnt+=1
print(cnt)
ABC081B - Shift only
n = int(input())
li = list(map(int,input().split()))
cnt = 0
while all(i % 2 == 0 for i in li):
li = [i // 2 for i in li]
cnt +=1
print(cnt)
ABC087B - Coins
a = int(input())
b = int(input())
c = int(input())
x = int(input())
print(
sum(500*i+100*j+50*k==x for i in range(a+1)for j in range(b+1)for k in range(c+1))
)
sum関数に気づけるか、3重のforループになったけど通りました。
ABC088B - Card Game for Two
n=input()
a=list(map(int,input().split()))
a.sort(reverse=True)
al,bo=0,0
for i,v in enumerate(a):
if i%2==0:
al+=v
else:
bo+=v
print(al-bo)
ABC085B - Kagami Mochi
n = int(input())
hash = []
for _ in range(n):
a = int(input())
hash.append(a)
print(set(hash))
forをブランクで回せることに気づいた。
ABC085C - Otoshidama
n, y = map(int, input().split())
for i in range(n + 1):
for j in range(n-i+1):
if 10000*i + 5000 *j + 1000*(n-j-i) == y:
print(i, j, n - i - j)
exit()
print("-1 -1 -1")
ABC049C - 白昼夢
s = input()
# erを先にすること
list = ["eraser", "erase", "dreamer", "dream"]
for i in list:
s = s.replace(i, "")
if s:
print("NO")
else:
print("YES")
これこそ、頭を使う問題。
ABC086C - Traveling
n = int(input())
prev_t, prev_x, prev_y = 0, 0, 0
for _ in range(n):
t, x, y = map(int, input().split())
dist = abs(x - prev_x) + abs(y - prev_y)
time_diff = t - prev_t
if dist > time_diff or (time_diff - dist) % 2 != 0:
print("No")
exit()
prev_t, prev_x, prev_y = t, x, y
print("Yes")
Cは難しいので、今後もっと解いていきたいですね。
感想
正直難しい。全問解けたわけではないですが、解けたものもありました。
わからないものは、考えてもわからないので答えを見てしまいましたが
いろんな書き方があるし、知らない関数の使い方も学びました。
標準入力の取り方
input()で1つは取ることが可能。
ですが、連続するデータの取得方法に悩んだり、リストに入れることが最初は戸惑いました。
mapの使い方
標準入力の取得で頻繁に使うことになったmap
mapを使うとリストに関数を適用できるため、intを使い変換をしたりしました。
標準入力では必須になりがち。
内包表記の使いかた(結構頻繁に)
forで書くと複数行になるものがあるため、内包型で1行にまとめる。
これはリファクタリングで使えるなと感じました。