AtCoder Beginner Contest

【pythonでABC155を解説】B - Papers, Please

問題概要

問題ページ

問題文

あなたは AtCoder 王国の入国審査官です。入国者の書類にはいくつかの整数が書かれており、あなたの仕事はこれらが条件を満たすか判定することです。

規約では、次の条件を満たすとき、またその時に限り、入国を承認することになっています。

  • 書類に書かれている整数のうち、偶数であるものは全て、\(3\) または \(5\) で割り切れる。

上の規約に従うとき、書類に \(N\) 個の整数 \(A_1, A_2, \dots, A_N\) が書かれた入国者を承認するならば APPROVED を、しないならば DENIED を出力してください。

注記

  • 問題文中の条件は、「\(x\) が書類に書かれている整数のうち、偶数であるものならば、\(x\) は \(3\) または \(5\) で割り切れる。」 と言い換えられます。
    ここで、「または」 「ならば」 は論理学における意味です。

制約

  • 入力はすべて整数
  • \(1 \leq N \leq 100\)
  • \(1 \leq A_i \leq 1000\)

問題の考察

\(A_1, A_2, \dots, A_N\)の\(i\)番目を\(A_i\)とすると 、入国が許可されるのは全ての\(A_i\)が次のいずれかの条件を満たす場合である。

入国が許可される条件

  • \(A_i\)が奇数
  • \(A_i\)が偶数ならば\(3\)または\(5\)で割り切れる

「論理学における意味でです」と難しい言葉が並べられているが、難しい問題ではないことが分かる。

入国が許可される条件

  • \(A_i\)が奇数の場合
    • 特に追加条件なし
  • \(A_i\)が偶数の場合
    • \(3\)または\(5\)で割り切れる

\(A_i\)が一つでも条件を満たさない場合には入国は許可されない。

割り切れるかどうかは%演算子とfor文とif文を使って判定できます。

たびすけ
問題文で難しい言葉が使われている場合は例などを確認しながら冷静に問題文を把握しよう。
問題文が分かりにくい問題でもコーディングは簡単な場合もあるよ!

ACコード

import sys


def solve():
    readline = sys.stdin.buffer.readline
    mod = 10 ** 9 + 7
    n = int(readline())
    a = list(map(int, readline().split()))
    for v in a:
        if v % 2 == 0:
            if v % 3 != 0 and v % 5 != 0:
                print("DENIED")
                exit()
    print("APPROVED")


if __name__ == '__main__':
    solve()

プログラミング

-AtCoder Beginner Contest
-