숫자로 이루어진 리스트 nums가 주어졌을 때, 리스트의 모든 요소가 서로 중복되지 않고 고유한지 확인해야 하는 경우가 있습니다.
예를 들어, 입력이 nums = [2, 3, 6, 5, 1, 8]이라면 모든 요소가 고유하므로 결과는 True가 됩니다.
문제 해결 접근 방식
이 문제는 집합(set) 자료구조를 활용하면 간단하게 해결할 수 있습니다. 집합은 중복된 값을 저장하지 않는 특성이 있기 때문입니다. 해결 단계는 다음과 같습니다.
- 리스트의 길이를
n에 저장합니다. - 새로운 빈 집합
s를 생성합니다. - 0부터 n까지 반복하면서 리스트의 각 요소를 집합
s에 삽입합니다. - 집합의 크기와 원래 리스트의 길이가 같으면
True를 반환하고, 그렇지 않으면False를 반환합니다.
집합은 중복 요소를 자동으로 제거하기 때문에, 만약 리스트에 중복된 값이 있다면 집합의 크기가 리스트의 길이보다 작아집니다. 이 특성을 이용해 고유 여부를 판별할 수 있습니다.
구현 예제
다음 코드를 통해 더 잘 이해할 수 있습니다.
def solve(l) :
n = len(l)
s = set()
for i in range(0, n):
s.add(l[i])
return (len(s) == len(l))
l = [2, 3, 6, 5, 1, 8]
print(solve(l))입력
[2, 3, 6, 5, 1, 8]
출력
True
더 간단한 방법
사실 파이썬에서는 위의 반복문 없이 한 줄로도 동일한 결과를 얻을 수 있습니다.
def solve(l):
return len(set(l)) == len(l)
l = [2, 3, 6, 5, 1, 8]
print(solve(l)) # True두 방법 모두 시간 복잡도는 O(n)으로 효율적이며, 리스트의 크기가 커져도 빠르게 동작합니다.