【AtCoder】PythonでABC236のB問題を丁寧に読み解く

AtCoder Beginner Contest 236 - Who is missing?

実際の問題はこちらからご覧ください。

【AtCoder Beginner Contest 236】B – Who is missing?

この問題のポイント

各整数が正確に4枚のカードとして存在し、高橋君が1枚のカードを抜き取った後のカードの枚数が4N-1枚であるということ。

この条件から、各整数は最初4回ずつ出現し、1枚抜き取られた後は、ほとんどの整数が依然として4枚存在する中で、ただ1つの整数だけが3枚に減るという事実に注目する必要がある。

この状況を踏まえると、解法を考える上で重要なのは、各整数の出現回数を正確に追跡し、どの整数が正確に3回しか出現しないかを識別すること。

実装方法

1.n = int(input())で整数Nを入力として受け取る。


2.cards = [0]*(n)で、各整数の出現回数を追跡するためのリストcardsを初期化する。このリストはサイズnで、すべての要素が0で始まります。


3.for i in map(int, input().split())で、空白区切りの整数列を入力として受け取り、それぞれの整数に対してループを行います。cards[i-1] += 1で、カードに書かれた整数iの出現回数を1増やします。Pythonのリストは0からインデックスされるため、i-1を使用して正しい位置を参照します。


4.for i in range(n)でcardsリストをループし、if cards[i] == 3で、出現回数が3回(つまり、1枚が抜き取られた)の整数をチェックします。print(i+1)で、その整数を出力します。ここでも、Pythonの0から始まるインデックスに対応するために、i+1を使用しています。

Pythonによる解答

アルゴリズムの計算量は、O(N)

n = int(input())
cards = [0]*(n)

for i in map(int, input().split()):
  cards[i-1] += 1

for i in range(n):
  if cards[i] == 3:
    print(i+1)