logo

줄리아에서 컬렉션의 중복을 없애는 법 📂줄리아

줄리아에서 컬렉션의 중복을 없애는 법

개요

줄리아에서 컬렉션의 중복을 없애고 체크하는 법을 소개한다. 중복을 없애주는 unique() 함수는 게 알고리즘적으로 봤을 때 전혀 어려울 게 없지만 막상 직접 구현하려면 귀찮고, 효율적이지 않을 수도 있다. 중복 원소가 없는지 체크하는 allunique() 함수는 구현조차 간단한만큼 찾아볼 일이 없는 함수라서 이 기회에 꼭 알아두는 게 좋다.

코드

unique()

julia> x = [3, 1, 4, 1, 5, 9, 2, 6, 5];

julia> y = unique(x)
7-element Vector{Int64}:
 3
 1
 4
 5
 9
 2
 6

allunique() 1

사실 이 포스트는 allunique()를 소개하는 것이 목적이다. 컬렉션이 중복 원소를 가지는지 체크하는 상식적인 방법 중 하나는 length(unique(x)) == length(x)와 같이 unique()를 취해서 원소가 줄어들었는지를 체크하는 것이다.

이 방법이 너무 쉽다보니 효율성에 대해 자만하기 쉬운데, 일단 unique() 함수는 길이 $n$인 배열을 적어도 한 번은 모든 원소를 살펴봐야해서 시간복잡도가 $O (n)$ 이다. 이는 코드에서 원소의 중복체크를 자주 할 때 분명히 부담이 될 수 있는 수준의 비용이며, allunique()는 배열의 길이에 따라 구현도 다르고 중간에 중복 원소가 발견되면 계산을 중단하고 체크에 성공할 수 있는 등 성능적인 부분에서 분명한 이점이 있다.

julia> allunique(x)
false

julia> allunique(y)
true

전체코드

x = [3, 1, 4, 1, 5, 9, 2, 6, 5];
y = unique(x)

allunique(x)
allunique(y)

환경

  • OS: Windows
  • julia: v1.9.0