Algorithm/자료구조

[Codility - Arrays] OddOccurrencesInArray

쩡류 2021. 9. 16. 10:05
728x90

https://app.codility.com/programmers/lessons/2-arrays/odd_occurrences_in_array/

 

OddOccurrencesInArray coding task - Learn to Code - Codility

Find value that occurs in odd number of elements.

app.codility.com

 

- Array의 element수가 최대 100만이므로, n^2 이상의 시간복잡도 알고리즘은 바로 시간초과가 난다.

O(NlogN) 이하의 알고리즘으로 해결해야 한다.

 

- Hash를 활용하기 위해 Map 객체를 활용했다. 전체 데이터를 한 번씩 순회하면서 O(N), 각 순회당 key의 존재 여부를 탐색하는(Map.has()) 데에 O(logN)이 드므로 O(NlogN)으로 해결할 수 있다. (map 객체는 key를 red-black Tree로 저장하므로 탐색에 O(logN)을 보장한다고 한다.

 

function solution(A) {
    let sH = new Map()
    // key가 존재하면 value += 1, 아니면 value를 1로 세팅
    for(let num of A){
        if(sH.has(num)) sH.set(num, sH.get(num)+1)
        else sH.set(num, 1)
    }
    // value가 홀수이면 unpair하므로 답이다.
    for(let [key, value] of sH){
        if(value % 2 !== 0) return key
    }
}