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

KiwiChipKiwiChip
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}
0
Subscribe to my newsletter

Read articles from KiwiChip directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

KiwiChip
KiwiChip

I'm currently learning Python and studying RAG (Retrieval-Augmented Generation).