[AtCoder]ABC062A ~ 067A[Python]

プログラミング

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”を出力すればいいですね。

タイトルとURLをコピーしました