EX14 - 隣り合う同じ値を探す Editorial /

Time Limit: 2 sec / Memory Limit: 1024 MiB

説明ページに戻る


問題文

5つの要素からなる配列が与えられます。
同じ値の要素が隣り合っているような箇所が存在するかどうかを判定してください。
存在するなら"YES"を、存在しなければ"NO"を出力してください。

この問題も以下の手順で解いてみましょう。

  1. ループを使わないで書く
  2. パターンを見つける
  3. ループで書き直す
data = [int(c) for c in input().split()]
# dataの中で隣り合う等しい要素が存在するなら"YES"を出力し、そうでなければ"NO"を出力する
# ここにプログラムを追記


制約

  • 0≦A_i≦100 (1 ≦ i ≦ 5)
  • A_i (1 ≦ i ≦ 5)は整数

入力

入力は次の形式で標準入力から与えられます。

A_1 A_2 A_3 A_4 A_5

出力

配列の隣り合う要素のうち、値が等しいものが存在するなら"YES"を、存在しなければ"NO"を出力してください。

出力の最後には改行が必要です。


ジャッジでは以下の入力例以外のケースに関してもテストされることに注意。

入力例1

5 3 3 1 4

出力例1

YES

入力例2

1 1 2 3 4

出力例2

YES

入力例3

1 2 1 2 1

出力例3

NO

入力例4

100 100 100 100 100

出力例4

YES

ヒント

  1. ループを使わないで書く
  2. パターンを見つける
  3. ループで書き直す

に沿って書く場合の流れをヒントで説明します。

まずは自分で考えてみて、詰まったら見てみましょう。

ヒント1 (ループを使わないで書く)

クリックでヒントプログラムを見る

隣合っている等しい要素があるかを順番に確認します。

# dataの中で隣り合う等しい要素が存在するなら"YES"を出力し、そうでなければ"NO"を出力する
if data[0]==data[1] or data[1]==data[2] or data[2]==data[3] or data[3]==data[4]:
    print("YES")
else:
    print("NO")

ヒント2 (パターンを見つける)

クリックでヒントを見る

繰り返しのパターンを見つけます。
ヒント1のヒントプログラムでは2行目のif文の中身が同じパターンの繰り返しになっています。

if data[0]==data[1] or data[1]==data[2] or data[2]==data[3] or data[3]==data[4]:

このままだと直接for文に書き換えにくいので,「または」の条件を複数のif文に分解します。
また、答えがYESなのかNOなのかをbool型の変数に入れるようにします。次のプログラムではYESならTrue、NOならFalseとしています。

ans = False  # 始めはfalseにしておき、条件を満たすときにtrueになるようにする
if data[0]==data[1]:
    ans = True
if data[1]==data[2]:
    ans = True
if data[2]==data[3]:
    ans = True
if data[3]==data[4]:
    ans = True
if ans:
    print("YES")
else:
    print("NO")

次のパターンが繰り返し存在していることが分かります。

  if data[k]==data[k+1]:
    ans = True

ヒント3 (ループで書き直す)

クリックでヒントを見る

以下のように for 文を書いてみてください:

ans = False
for k in (#ここを埋めてください):
    if data[k]==data[i+1]:
        ans = True


テスト入出力

書いたプログラムがACにならず、原因がどうしてもわからないときだけ見てください。

クリックでテスト入出力を見る

テスト入力1

0 1 2 3 3

テスト出力1

YES

テスト入力2

0 1 100 100 4

テスト出力2

YES

テスト入力3

40 30 66 44 65

テスト出力3

NO


解答例

必ず自分で問題に挑戦してみてから見てください。

クリックで解答例を見る
data = [int(c) for c in input().split()]
# dataの中で隣り合う等しい要素が存在するなら"YES"を出力し、そうでなければ"NO"を出力する
ans = False # 始めはfalseにしておき、条件を満たすときにtrueになるようにする
for k in range(len(data)-1):
    if data[k]==data[k+1]:
        ans = True
if ans:
    print("YES")
else:
    print("NO")