『AtCoderに登録したら解くべき精選過去問10問』をPythonで解く(前編)
・AtCoder精進日記
・初学者(2020/04/10〜現在)
・使用言語:Python
・A-D問題中心
・目標:緑
間違いなどあればどんどん指摘して下さい!
2020/04/11分
どうも南無南無です!今回はけんちょんさん(@drken1215)の精選過去問10問からやってきます。まずは前半5問から
ABC086A
感想:特になし
サンプルコード:
A,B = map(int,input().split())
if (A*B) % 2 == 1:
print('Odd')
else:
print('Even')
ABC081A
感想:分けて書いてたけど、これはワンコードで書いたほうが分かりやすいかも
サンプルコード:
S = input()
print(S.count('1'))
ABC081B
感想:all()を初めて使用した。
※いずれかの要素がTrueか判定: any(), すべての要素がFalseか判定: not any()
サンプルコード:
N = int(input())
A = list(map(int, input().split()))
count = 0
while all(i % 2 == 0 for i in A):
A = [i/2 for i in A]
count += 1
print(count)
別解:2進数に変換してからする方法
n = input()
a = list(map(int, input().split()))
ans = float('inf')
for i in a:
ans = min(ans, len(bin(i)) - bin(i).rfind('1') - 1)
print(ans)
引用元:https://note.com/keisuke_funabiki/n/nec9df628f77c#Vyjlp
ABC087B
感想:数学的な解釈は出来たが、初見で上手いコーディングが思いつかず。他人のサンプルコードを見ると容易に理解できたので練習の問題かも?全探索のコーディングが弱いので練習必須。
サンプルコード:
A, B, C, X = [int(input()) for i in range(4)]
ans = 0
for a in range(A+1):
for b in range(B+1):
for c in range(C+1):
if a*500 + b*100 + c*50 == X:
ans += 1
print(ans)
ABC083B
感想:初見失敗。数字を文字列に変換するというアイデアが思いつかず。
サンプルコード:
N,A,B=map(int,input().split())
ans = 0
for i in range(N+1):
if A <= sum(map(int, list(str(i)))) <= B:
ans += i
print(ans)
まとめ
・087Bと083B初見失敗
・コーディングが安定しないのでリーダブルコード買ったほうがいい気がする
・全探索が弱点
・数値⇔文字列の変換も今後要チェック
・慣れてれば解けそうな問題ばかりでくやしい
参考:
・AtCoder Beginners Selection 徹底解説 【Python】
この記事が気に入ったらサポートをしてみませんか?