ABC406 A – Not Acceptable

A - Not Acceptable
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.

問題自体にはACできたのですが、スマートな書き方があるようだったので、その書き方についてまとめます。言語はPythonです。

自分がACしたコードは以下です。

def i_map():
    return map(int, input().split())


def i_list():
    return list(map(int, input().split()))


a, b, c, d = i_map()

if a > c:
    print("Yes")
    exit()
elif a == c:
    if b > d:
        print("Yes")
        exit()

print("No")

方針としては最初に時間を比較、時間が同じ場合は分を比較して締め切りに間に合っていればYesを出力。間に合わなければNoを出力します。

別の書き方は以下です。

def i_map():
    return map(int, input().split())


def i_list():
    return list(map(int, input().split()))


a, b, c, d = i_map()

ab = (a, b)
cd = (c, d)

if ab > cd:
    print("Yes")
else:
    print("No")

変わったところはタプルでまとめたところになります。

タプル同士の比較では各要素を順番に比較し最初に見つかった異なる要素に基づいて全体の比較結果が決定されます。

つまり上記の例ではまず a > c を比較し、同じであれば次に b > d を比較します。

さらに別の回答が以下です。

import datetime

def i_map():
    return map(int, input().split())


def i_list():
    return list(map(int, input().split()))


a, b, c, d = i_map()

ab = datetime.time(hour=a, minute=b)
cd = datetime.time(hour=c, minute=d)

if ab > cd:
    print("Yes")
else:
    print("No")

datetimeを利用して比較しています。これが一番シンプルでわかりやすいでしょうか?

Atcoderをやる上では早く・正しい回答が出せればどれでも良いですが、チーム開発することを考えるとあまりif文のネストはしたくないなと思いました。

コメント

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