AtCoder Beginner Contest

【pythonでABC155を解説】A - Poor

問題概要

問題ページ

問題文

\(3\) つ組の数について、ある \(2\) つが等しく、残りの \(1\) つがそれらと異なるとき、その \(3\) つ組を「かわいそう」であるといいます。

\(3\) つの整数 \(A, B, C\) が与えられるので、この \(3\) つ組がかわいそうであれば Yes を、そうでなければ No を出力してください。

制約

  • \(A, B, C\) はいずれも \(1\) 以上 \(9\) 以下の整数

問題の考察

条件に一致する全ての\(A, B, C\)のパターンを考えるのがシンプルで分かりやすい。

条件を満たすパターン

  • \(A=B\neq C\)(AとBが等しくCだけ異なる)
  • \(A\neq B=C\)(BとCが等しくAだけ異なる)
  • \(A\neq C=B\)(AとCが等しくBだけ異なる)

\(A, B, C\)をカウントして要素の個数が\((1,2)\)の場合には条件を満たすという考え方もあるが、条件を満たすパターンは\(3\)つしかないのでif文で条件分岐してあげた方がシンプルで分かりやすい。

これらの条件を満たしているかpythonでは演算子を使って次のように記述できる。

pythonでの記述

  • \((A=B\neq C) \Rightarrow(A=B!=C)\)
  • \((A\neq B=C )\Rightarrow(A!=B=C)\)
  • \((A\neq C=B) \Rightarrow(A!=C=B)\)

たびすけ
抽出する条件のパターンが少ない場合にはif文で条件分岐した方がコーディングが楽なこともあるよ!

ACコード

import sys


def solve():
    readline = sys.stdin.buffer.readline
    mod = 10 ** 9 + 7
    a, b, c = list(map(int, readline().split()))
    if a == b != c or a != b == c or a == c != b:
        print("Yes")
    else:
        print("No")


if __name__ == '__main__':
    solve()

-AtCoder Beginner Contest
-