0Pricing
DSA Interview Prep · 강의

Python의 딕셔너리와 집합

dict와 set의 생성, 멤버십 검사, collections.Counter로 빈도를 세는 일반적인 패턴을 살펴봅니다.

Python의 딕셔너리와 집합은(는) CoddyKit의 무료 DSA Interview Prep 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 DSA Interview Prep 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. DSA Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.

파이썬 딕셔너리: 키-값 저장소

파이썬 딕셔너리는 키를 값에 연결하며, 평균적으로 조회, 삽입, 삭제를 O(1)에 수행합니다. 두 수의 합 문제, 애너그램 검사, 빈도 계산의 핵심 도구입니다. 코드에서 사용법을 보여 줍니다.

d = {'apple': 3, 'banana': 5}
print(d['apple'])   # 3
d['cherry'] = 7
print(len(d))       # 3
print('banana' in d)  # True
del d['apple']
print(d)            # {'banana': 5, 'cherry': 7}

.get()을 사용한 안전한 조회

없는 키를 d[key]로 읽으면 KeyError가 발생합니다. 대신 d.get(key, default)를 사용해 대체값을 반환하십시오. 예상하지 못한 실행 시간 오류를 피할 수 있는 안전한 습관입니다.

freq = {}
words = ['the', 'cat', 'sat', 'on', 'the', 'mat']
for w in words:
    freq[w] = freq.get(w, 0) + 1
print(freq)
# {'the': 2, 'cat': 1, 'sat': 1, 'on': 1, 'mat': 1}

print(freq.get('dog', 0))  # 0  (no KeyError)

더 깔끔한 그룹화를 위한 defaultdict

defaultdict(list)는 새로운 키마다 빈 리스트를 자동으로 만들므로 그룹화 문제에서 반복적인 준비 코드를 없애 줍니다. defaultdict(int)는 모든 키를 0에서 시작하게 하므로 쉽게 개수를 셀 수 있습니다.

from collections import defaultdict

groups = defaultdict(list)
words = ['eat', 'tea', 'tan', 'ate', 'nat', 'bat']
for w in words:
    key = ''.join(sorted(w))  # canonical anagram key
    groups[key].append(w)

print(list(groups.values()))
# [['eat','tea','ate'], ['tan','nat'], ['bat']]

Counter: 빠른 빈도 맵

Counter는 개수 세기에 맞게 만들어진 딕셔너리입니다. 어떤 반복 가능한 객체든 전달하면 즉시 빈도 맵을 얻을 수 있습니다. most_common(k)는 상위 k개를 반환합니다. 코드에서 애너그램 검사를 보여 줍니다.

from collections import Counter

c = Counter('abracadabra')
print(c)           # Counter({'a':5,'b':2,'r':2,'c':1,'d':1})
print(c.most_common(2))  # [('a', 5), ('b', 2)]

# Valid anagram check
def is_anagram(s, t):
    return Counter(s) == Counter(t)

print(is_anagram('anagram', 'nagaram'))  # True

파이썬 집합: 순서가 없고 중복이 없는 모음

집합은 중복되지 않는 항목을 저장하며 포함 여부 검사를 O(1)에 수행합니다. {1, 2, 3} 또는 set(iterable)을 사용하십시오. 단, {}는 딕셔너리를 만들므로 빈 집합에는 set()을 사용해야 합니다. 중복을 찾는 데 매우 유용합니다.

seen = set()
nums = [1, 2, 3, 2, 1, 4]
duplicates = []
for n in nums:
    if n in seen:          # O(1) check
        duplicates.append(n)
    seen.add(n)
print(duplicates)  # [2, 1]
print(len(seen))   # 4  (unique values)

면접을 위한 집합 연산

집합은 수학 연산을 지원합니다. |는 합집합, &는 교집합, -는 차집합, ^는 대칭 차집합입니다. 이러한 연산을 사용하면 "공통 원소" 유형의 문제를 한 줄로 해결할 수 있습니다.

a = {1, 2, 3, 4}
b = {3, 4, 5, 6}

print(a | b)  # {1, 2, 3, 4, 5, 6}  union
print(a & b)  # {3, 4}              intersection
print(a - b)  # {1, 2}              difference
print(a ^ b)  # {1, 2, 5, 6}        symmetric diff

포함 여부 검사: 리스트와 집합 비교

선택하는 자료 구조에 따라 속도가 달라집니다. 리스트에서 in으로 확인하면 O(n)이지만, 집합에서는 O(1)입니다. 반복해서 조회해야 한다면 먼저 리스트를 집합으로 변환하는 것이 흔한 성능 향상 방법입니다.

word_list = ['apple', 'banana', 'cherry', 'date']
word_set  = set(word_list)

# O(n) per check
print('banana' in word_list)  # True

# O(1) per check
print('banana' in word_set)   # True

# Practical example: find common elements
a = [1, 2, 3, 4, 5]
b = [3, 4, 5, 6, 7]
common = [x for x in a if x in set(b)]
print(common)  # [3, 4, 5]

딕셔너리 순회: 키, 값, 항목

.keys(), .values(), .items()를 사용해 딕셔너리를 순회하십시오. 반복문 중간에 키를 삭제하지 마십시오. 먼저 키를 리스트에 모은 다음 순회가 끝난 뒤 삭제해야 합니다. 코드를 확인해 보십시오.

scores = {'Alice': 90, 'Bob': 75, 'Carol': 88}

for name, score in scores.items():
    print(f'{name}: {score}')

# Find key with max value
best = max(scores, key=scores.get)
print(best)  # Alice

# Safe deletion
to_del = [k for k, v in scores.items() if v < 80]
for k in to_del:
    del scores[k]
print(scores)  # {'Alice': 90, 'Carol': 88}

frozenset: 해시 가능한 집합

frozenset은 변경할 수 없는 집합이므로 딕셔너리 키가 되거나 다른 집합 안에 들어갈 수 있습니다. 순서가 중요하지 않을 때 문자 집합으로 애너그램을 그룹화하는 데 유용합니다.

from collections import defaultdict

words = ['eat', 'tea', 'tan', 'ate', 'nat', 'bat']
groups = defaultdict(list)
for w in words:
    key = frozenset(w)  # hashable; 'eat','tea','ate' all share same key
    groups[key].append(w)

print([sorted(g) for g in groups.values()])
# [['ate','eat','tea'], ['nat','tan'], ['bat']]

변환을 위한 딕셔너리 컴프리헨션

딕셔너리 컴프리헨션은 한 줄로 매핑을 만듭니다. {k: v for ...}와 같은 형태입니다. 딕셔너리를 뒤집거나 쌍을 필터링할 때 유용합니다. 단, 뒤집으려면 값이 고유하다고 가정해야 합니다. 코드를 확인해 보십시오.

# Invert a dict
original = {'a': 1, 'b': 2, 'c': 3}
inverted = {v: k for k, v in original.items()}
print(inverted)  # {1:'a', 2:'b', 3:'c'}

# Filter by value
scores = {'Alice': 90, 'Bob': 55, 'Carol': 78}
passing = {k: v for k, v in scores.items() if v >= 60}
print(passing)  # {'Alice': 90, 'Carol': 78}

가장 긴 연속 수열

집합을 사용하면 가장 긴 연속 수열 문제를 O(n)에 해결할 수 있습니다. 모든 수를 집합에 넣은 다음, 바로 앞 수가 없는 수에서만 세기를 시작하면 됩니다. 정렬은 필요하지 않습니다.

def longest_consecutive(nums):
    num_set = set(nums)
    best = 0
    for n in num_set:
        if n - 1 not in num_set:  # start of sequence
            cur = n
            streak = 1
            while cur + 1 in num_set:
                cur += 1
                streak += 1
            best = max(best, streak)
    return best

print(longest_consecutive([100,4,200,1,3,2]))  # 4 (1,2,3,4)

간단한 확인

간단히 확인해 보겠습니다. 이번 레슨에서 배운 딕셔너리와 집합의 개념을 얼마나 잘 익혔는지 살펴보십시오. 여기서는 자신의 직감을 믿으십시오. 🎯

레슨 요약

요약하면, 딕셔너리는 개수 세기와 그룹화를 위한 O(1) 조회를 제공하고, Counter와 defaultdict는 반복적인 준비 코드를 줄여 주며, 집합은 O(n) 탐색을 O(1) 검사로 바꿔 줍니다.

자주 묻는 질문

“Python의 딕셔너리와 집합” 강의는 무료인가요?

네 — “Python의 딕셔너리와 집합” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 DSA Interview Prep 강의 전체를 잠금 해제할 수 있습니다. DSA Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.

“Python의 딕셔너리와 집합”에서 뭘 배우나요?

dict와 set의 생성, 멤버십 검사, collections.Counter로 빈도를 세는 일반적인 패턴을 살펴봅니다. 브라우저에서 직접 실행하는 실습 코드로 DSA Interview Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

DSA Interview Prep을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 DSA Interview Prep은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“Python의 딕셔너리와 집합” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 DSA Interview Prep 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 DSA Interview Prep 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 리스트, 튜플, 슬라이싱
  2. Python의 딕셔너리와 집합
  3. 컴프리헨션과 내장 함수
  4. 함수, 클로저, 람다
← DSA Interview Prep(으)로 돌아가기