PythonでAtCoderの過去問を解いています。
ABC 062A – Grouping
問題
すぬけ君は、1から12までの整数を下図のようにグループ分けしました。 整数x, y(1≤x<y≤12) が与えられるので、x,yが同一のグループに属しているか判定してください。
自分の回答
x, y = map(int, input().split())
if x == 1 or x == 3 or x == 5 or x == 7 or x == 8 or x == 10 or x == 12:
x = "a"
elif x == 4 or x == 6 or x == 9 or x == 11:
x = "b"
if y == 1 or y == 3 or y == 5 or y == 7 or y == 8 or y == 10 or y == 12:
y = "a"
elif y == 4 or y == 6 or y == 9 or y == 11:
y = "b"
if x == y:
print("Yes")
else:
print("No")
ゴリ押しですね。x、yの値を確認して、変数x、yにグループ名を代入しなおしています。
x, y = map(int, input().split())
A=[1,3,5,7,8,10,12]
B=[4,6,9,11]
C=[2]
if (x in A and y in A) or (x in B and y in B) or (x in C and y in C):
print("Yes")
else:
print("No")
他の方のを参考に修正しました。pythonでは、x in Aとすることで、リストAにxが含まれるかどうかを確認することができるみたいです。便利ですね。
in演算子
リストやタプルなどに特定の要素が含まれるかどうかを確認・判定する時に使います。
not inを使うことで存在しないことを確認することができる。
ABC 063A – Restricted
問題
二つの整数A, Bが入力されます。A+Bの値を出力してください。
ただし、A+Bが10以上の場合は、代わりにerror
と出力してください。
自分の回答
A, B = map(int, input().split())
if A + B < 10:
print(A + B)
else:
print("error")
問題文の通りですね。A+Bが未満の時は、その値を、10以上の時は”error”を出力すればいいですね。
ABC 064A – RGB Cards
問題
AtCoDeer君は、赤、緑、青色のカードを持っています。
それぞれのカードには1以上 9以下の整数が書かれており、赤色のカードには r、緑色のカードにはg、青色のカードにはbが書かれています。
3つのカードを左から順に赤、緑、青色の順に並べ、左から整数を読んだときにこれが4の倍数であるか判定しなさい。
自分の回答
r, g, b = map(int, input().split())
num = r * 100 + g * 10 + b
if num % 4 == 0:
print("YES")
else:
print("NO")
rは百の位、gは十の位、bは一の位なので、rに100、gに10を掛けて足し合わせれば三桁の数字がもとまります。その数字が4で割り切れるかどうかを確かめればいいですね。
もっとよくする
r, g, b = map(int, input().split())
num = g * 10 + b
if num % 4 == 0:
print("YES")
else:
print("NO")
他の方の答えをみたところ、百の位を計算していないものがありました。rの値を使っていません。4で割り切れるかどうかは、下二桁が4で割り切れるかどうかを確かめれば十分なのです。
ABC 065A – Expired?
高橋君は胃が強いので、賞味期限をX日まで過ぎた食品を食べてもお腹を壊しません。 賞味期限をX+1日以上過ぎた食品を食べると、お腹を壊します。
また、賞味期限を過ぎずに食べると、おいしく感じます。そうでない場合、おいしく感じません。
高橋君は、賞味期限のA日前に食品を買ってきて、買ってからB日後に食べました。
高橋君が食品をおいしく感じた場合delicious
を、おいしくは感じなかったがお腹は壊さなかった場合safe
を、お腹を壊した場合dangerous
を出力するプログラムを作成してください。
自分の回答
X, A, B = map(int, input().split())
if B <= A:
print("delicious")
elif B <= A + X:
print("safe")
else:
print("dangerous")
食べた日(B)が賞味期限(A)より小さかったら”delicious”、Bが食べてもお腹を壊さない期間内(A+X)であれば、”safe”、それ以上は”dangerous”を出力すれば良いです。
ABC 066A – ringring
snuke君は自転車を買いに来ました。 snuke君はすでに買う自転車を決めたのですが、その自転車にはベルが付いていないため、 自転車とは別にベルも買う必要があります。
snuke君は安全意識が高いので、ベルをどちらの手でも鳴らせるよう、両方のハンドルに1つずつ 付けることにしました。
お店にあるベルは3種類で、それぞれ a円、b円、c円です。 この3つのうち、異なる2つのベルを選んで買うときの、値段の合計の最小値を求めて下さい。
自分の回答
bells = sorted(list(map(int,input().split())))
print(bells[0] + bells[1])
sortedを使います。与えられた三つの値をbellsというリストに入れて、ソートします。そして、〇番目と1番目を足せば、合計の最小値を求めることができます。
ABC 067A – Sharing Cookies
問題文
すぬけくんは3匹のヤギにクッキーを渡したいです。
すぬけくんはA枚のクッキーが入った缶と、B枚のクッキーが入った缶を持っています。 すぬけくんは A,B,A+Bのいずれかの枚数のクッキーをヤギたちに渡すことができます。
3匹のヤギが同じ枚数ずつ食べられるようにクッキーを渡すことが可能かどうか判定してください。
自分の回答
A, B = map(int, input().split())
if A % 3 == 0 or B % 3 == 0 or (A + B) % 3 == 0:
print("Possible")
else:
print("Impossible")
AまたはBまたはA+Bが3で割り切れる時に、”Possible”を出力すればいいですね。