AtCoder Beginner Contest

【pythonでABC154を解説】C - Distinct or Not

問題概要

問題ページ

問題文

整数列 \(A_1, A_2, ..., A_N\) が与えられます。
この整数列のどの \(2\) つの要素も互いに異なるならば YES を、そうでないなら NO を出力してください。

制約

  • \(2 ≤ N ≤ 200000\)
  • \(1 ≤ A_i ≤ 10^9\)
  • 入力は全て整数

問題の考察

pythonだと次の2通りの解答方法が簡単に思いつく

解答方針

  • collection.Counter()を使って各要素毎に要素数をカウントする方法
  • ソートしてから各要素の隣の要素が同じかどうか確認する方法

今回のACコードはcollectionライブラリを使わずにsort()for文を使った方法でコーディングしている。

どちらも良く使うのでどちらでも解答できるようにしたい。

配列をsort()した場合、同一の要素があればその要素は左右に出現することは感覚的に理解できると思う。

たびすけ
sort()することで問題の難易度がグッと下がる問題はいっぱいあるよ!

ACコード

import sys


def solve():
    readline = sys.stdin.buffer.readline
    mod = 10 ** 9 + 7
    n = int(readline())
    a = list(map(int, readline().split()))
    a.sort()
    for i in range(1, n):
        if a[i] == a[i-1]:
            print("NO")
            exit()
    print("YES")


if __name__ == '__main__':
    solve()

プログラミング

-AtCoder Beginner Contest
-