[Python TIL] Set 함수 사용법과 코딩 테스트에서의 활용법

[Python TIL] Set 함수 사용법과 코딩 테스트에서의 활용법

·

3 min read

안녕하세요! 오늘은 파이썬에서 정말 유용하게 쓰이는 set에 대해 이야기해 보려고 해요.

특히 알고리즘 문제를 풀 때 set이 얼마나 강력한 도구인지 알아보는 시간을 가져보려고 합니다.

set이란?

set집합을 나타내는 자료형이에요.

중복을 허용하지 않고, 순서가 없는 데이터 구조죠.

이 말만 들으면 좀 심심하게 느껴질 수 있지만, 알고리즘 문제에서는 정말 강력한 도구랍니다.

쉽게 말하면, set은 이런 상황에서 빛을 발해요.

  • 중복 제거*가 필요할 때*

  • 빠르게 포함 여부*를 확인해야할 때*

  • 교집합, 합집합 같은 연산이 필요할 때


set 함수 문법

set의 주요 함수와 문법은 다음과 같습니다.

set(iterable)
  • iterable: list, tuple, string 등 반복 가능한 객체를 전달하여 set을 생성합니다.

주요 메서드와 사용법

  1. add(element)

    • 집합에 새로운 요소를 추가합니다.
    my_set = {1, 2, 3}
    my_set.add(4)
    print(my_set)  # {1, 2, 3, 4}
  1. remove(element)

    • 특정 요소를 제거합니다. 요소가 없으면 KeyError를 발생시킵니다.
    my_set = {1, 2, 3}
    my_set.remove(2)
    print(my_set)  # {1, 3}
  1. discard(element)

    • 특정 요소를 제거합니다. 요소가 없어도 에러를 발생시키지 않습니다.
    my_set = {1, 2, 3}
    my_set.discard(4)  # 에러 없음
    print(my_set)  # {1, 2, 3}
  1. union(other_set) 또는 |

    • 두 집합의 합집합을 반환합니다.
    set1 = {1, 2, 3}
    set2 = {3, 4, 5}
    print(set1.union(set2))  # {1, 2, 3, 4, 5}
  1. intersection(other_set) 또는 &

    • 두 집합의 교집합을 반환합니다.
    set1 = {1, 2, 3}
    set2 = {2, 3, 4}
    print(set1.intersection(set2))  # {2, 3}
  1. difference(other_set) 또는 -

    • 두 집합의 차집합을 반환합니다.
    set1 = {1, 2, 3}
    set2 = {3, 4, 5}
    print(set1.difference(set2))  # {1, 2}
  1. symmetric_difference(other_set) 또는 ^

    • 두 집합의 대칭 차집합을 반환합니다.
    set1 = {1, 2, 3}
    set2 = {3, 4, 5}
    print(set1.symmetric_difference(set2))  # {1, 2, 4, 5}

알고리즘 문제에서 set 활용하기

1. 중복 제거하기

가장 간단한 활용법입니다! 문제에서 "중복된 요소를 제거하세요"라는 말이 나오면 바로 set을 떠올려 보세요.

# 예제 문제: 주어진 리스트에서 중복된 숫자를 제거하라
nums = [1, 2, 2, 3, 4, 4, 5]
unique_nums = list(set(nums))
print(unique_nums)  # [1, 2, 3, 4, 5]

2. 교집합, 합집합 구하기

여러 집합의 공통 요소모든 요소를 구해야 할 때도 set이 유용합니다.

# 예제 문제: 두 배열의 교집합 구하기
nums1 = [1, 2, 3, 4]
nums2 = [3, 4, 5, 6]
intersection = list(set(nums1) & set(nums2))
print(intersection)  # [3, 4]

3. 빠르게 포함 여부 확인하기

set은 포함 여부를 확인할 때 리스트보다 훨씬 빠른 성능을 보여줍니다. 리스트는 요소를 하나씩 확인하지만, set은 해시를 사용하기 때문이에요.

# 예제 문제: 특정 값이 존재하는지 확인하라
nums = {1, 2, 3, 4, 5}
print(3 in nums)  # True
print(6 in nums)  # False

이런 속도 차이 덕분에 set은 대용량 데이터를 처리할 때도 아주 유용하답니다.


알고리즘 문제에서 set을 활용한 팁

1. 문제를 잘 읽자!

문제에서 "중복을 허용하지 않는다"거나 "순서가 중요하지 않다"라는 표현이 나오면 set이 필요할 가능성이 높습니다.

2. 시간 복잡도를 고려하자

set의 주요 연산은 평균적으로 O(1)입니다.

그래서 리스트보다 훨씬 빠르게 포함 여부를 확인할 수 있답니다.

3. set 메서드 익히기

add, remove, union, intersection 같은 메서드를 잘 활용하면 문제 해결 속도가 올라갑니다.

예를 들어 다음과 같이 사용할 수 있습니다.

# 요소 추가 및 제거
my_set = {1, 2, 3}
my_set.add(4)  # {1, 2, 3, 4}
my_set.remove(2)  # {1, 3, 4}