実際の問題はこちらからご覧ください。
【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)