海老名日記

海老名での暮らしからキャンプ、子育てまで語る雑記ブログ

CodilityのOddOccurrencesInArrayをPythonで解いてみた

こんにちは😄えびならいふです。
久しぶりにプログラミングに関する話題で、またまたCodilityというプログラミングテストのようなもののLessonをPythonで解いてみた話。
今日はその中の最初のLesson 2 OddOccurrencesInArrayという問題を解いてみた。

OddOccurrencesInArray

いつも通り、まずはOddOccurrencesInArrayがどういう問題かの説明。
入力は配列Aのみで、配列中でペアにならないにならない数値を返すという問題。
例えば以下のような配列Aが与えられた場合、

A = [9, 3, 9, 3, 9, 7, 9]

A[0]とA[2]が9でペア、A[1]とA[3]が3でペア、A[4]とA[6]が9でペアになりペアにならないのはA[5]の7となる。
問題はシンプルですごく簡単。

解いてみる

こういうプログラミングテストで注意しないといけないのは入力となる配列や変数の範囲だが、今回は特に気にする必要はなさそう。
プログラミング時の仮定として、配列Aの長さは奇数、1つを除いて偶数個出てくるという条件があるため例外的な処理も必要ない。
解き方はいくつかあるかもしれないが、今回はPythonのcollectionsにあるCounterを使って解く。
Counterを使うと配列などの要素をカウントしてくれて、要素ごとの出現数をConuter型 (dict形式に近い)で出してくれる。
要素ごとに出現数がわかるため、偶数になっているものは無視して、奇数になっているものを取り出せば良い。
実際に書くとこんな感じになる↓

from collections import Counter
def solution(A):
    # 各要素の数をカウント
    count = Counter(A)
    for k, v in count.items():
        # 1つ以外はペアになるので、各要素を見ていって、割って余りが1になっていればそれを返す
        if v % 2 == 1:
            return k

終わりに

今回の実装でスコアはこんな感じになる。

もっといい解き方はありそうだけど、とりあえず100点にはなるので良し。