-
[Codility - Arrays] OddOccurrencesInArrayAlgorithm/자료구조 2021. 9. 16. 10:05728x90
https://app.codility.com/programmers/lessons/2-arrays/odd_occurrences_in_array/
- 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 } }
'Algorithm > 자료구조' 카테고리의 다른 글
[프로그래머스] 오픈채팅방 (0) 2021.10.01 [프로그래머스] 짝지어 제거하기 (0) 2021.09.30 [Codility - Counting Elements] Brackets (0) 2021.09.20 [Codility - Counting Elements] frog_river_one (0) 2021.09.17