【ABC170 B】「Crane and Turtle」を解く【Python3】

「AtCoder」解説一覧へ

「庭の動物の総数は X匹で、それらの足の総数は Y本である」という発言が正しいような鶴と亀の組み合わせが存在するか判定する問題です。

提出
x, y = map(int, input().split())
 
for i in range(x+1):
    j = x-i
    num = i*2+j*4
    if num==y:
        print("Yes")
        exit()
 
print("No")

鶴の数をi、亀の数をjと考えます。

for文を用いて、(i, j) の全てのパターンを調べ、その中で矛盾しないものが一つでもあれば「Yes」を出力して、プログラムを終わらせます。

プログラムが終了しないまま、最後まで調べ終えた場合「No」を出力します。

動物の総数Xは決まっているので、j の数は、i から導き出すことができ、i のパターンの探索だけで可能です。

このほか、以下のようにif文のみで解くこともできます。

提出
x, y = map(int, input().split())
if y % 2 == 1:
    print("No")
elif 2*x <= y <= 4*x:
    print("Yes")
else:
    print("No")

鶴も亀も足の数が偶数であるため、yが奇数のものは「No」となります。

動物の総数のみが分かっている場合、足の数の最小値と最大値はそれぞれ、「2x」と「4x」となります。

4本を「2本+2本」と捉えることで1匹ずつ調整することができるので、「2x」「4x」の間にy(偶数)が含まれていれば、「Yes」になります。

それ以外の場合は「No」です。

split()メソッド

split()メソッドは、区切り文字を指定して、文字列を分割します。

区切り文字を指定しない場合、空白、タブ、改行で分割されます。

str.split("区切り文字")

map()関数

map()関数は、イテラブル(リストやタプルなど)の各要素に関数の処理を適用します。

map(関数、イテラブル)

【ABC170】解説記事リスト

「AtCoder」解説一覧に戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です