코딩 테스트를 준비하다 보면 라이브러리의 중요성을 깨닫게 된다. 몇 줄의 코드가 단 한 줄의 모듈로 해결되는 경우가 많기 때문이다. 그렇기에 오늘은 Python
의 주요 라이브러리, 특히 코딩 테스트에서 자주 쓰이는 모듈들을 정리해 보려고 한다.
collections
📚deque
: 양방향 큐 자료구조로, 스택 및 큐를 구현할 때 유용하다.
from collections import deque
dq = deque([1, 2, 3])
dq.append(4) # 오른쪽에 추가
dq.appendleft(0) # 왼쪽에 추가
print(dq) # deque([0, 1, 2, 3, 4])
dq.pop() # 오른쪽에서 제거
dq.popleft() # 왼쪽에서 제거
print(dq) # deque([1, 2, 3])
Counter
: 요소의 개수를 셀 때 유용하다. 주로 문자열 내 문자 빈도 계산, 리스트 내 요소 빈도 계산 등에 사용된다.
from collections import Counter
cnt = Counter(['a', 'b', 'c', 'a', 'b', 'b'])
print(cnt) # Counter({'b': 3, 'a': 2, 'c': 1})
print(cnt['a']) # 2
print(cnt.most_common(2)) # [('b', 3), ('a', 2)]
defaultdict
: 기본 값을 제공하는 딕셔너리로, 키가 없는 경우 기본 값을 반환한다. 주로 그래프 문제나 딕셔너리 초기화에 사용된다.
from collections import defaultdict
dd = defaultdict(int)
dd['a'] += 1
print(dd) # defaultdict(<class 'int'>, {'a': 1})
namedtuple
: 이름이 있는 필드를 가진 튜플로, 읽기 쉬운 코드 작성에 유리하다. 주로 데이터 객체를 단순하게 표현할 때 사용된다.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(11, y=22)
print(p.x, p.y) # 11 22
itertools
🔄combinations
: 주어진 길이의 조합을 생성한다. 주로 부분 집합 문제나 조합 계산에 사용된다..
from itertools import combinations
comb = combinations([1, 2, 3], 2)
print(list(comb)) # [(1, 2), (1, 3), (2, 3)]
permutations
: 주어진 길이의 순열을 생성한다. 순열 계산 문제에 유용하다.
from itertools import permutations
perm = permutations([1, 2, 3], 2)
print(list(perm)) # [(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]
product
: 카테시안 곱을 반환한다. 여러 리스트의 모든 조합을 구할 때 사용된다.
from itertools import product
prod = product([1, 2], ['a', 'b'])
print(list(prod)) # [(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')]
combinations_with_replacement
: 중복 조합을 생성한다.
from itertools import combinations_with_replacement
comb_wr = combinations_with_replacement([1, 2, 3], 2)
print(list(comb_wr)) # [(1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (3, 3)]
heapq
⛏️heappush
: 힙에 원소를 추가한다. 주로 우선순위 큐 구현에 사용된다.
heappop
: 힙에서 원소를 제거하고 반환한다.
heapify
: 리스트를 힙으로 변환한다.
import heapq
heap = []
heapq.heappush(heap, 4)
heapq.heappush(heap, 1)
heapq.heappush(heap, 7)
print(heap) # [1, 4, 7]
print(heapq.heappop(heap)) # 1
print(heap) # [4, 7]
bisect
🔍bisect_left
: 정렬된 리스트에 값을 삽입할 위치를 반환 (왼쪽 기준), 주로 이진 탐색 구현에 사용된다.
bisect_right
: 정렬된 리스트에 값을 삽입할 위치를 반환 (오른쪽 기준)
insort_left
: 값을 삽입하고 정렬된 상태를 유지 (왼쪽 기준)
insort_right
: 값을 삽입하고 정렬된 상태를 유지 (오른쪽 기준)
import bisect
lst = [1, 2, 4, 5]
bisect.insort_left(lst, 3)
print(lst) # [1, 2, 3, 4, 5]
math
🔢gcd
: 최대 공약수 계산
factorial
: 팩토리얼 계산
sqrt
: 제곱근 계산
ceil
/ floor
: 올림 / 내림
import math
print(math.gcd(60, 48)) # 12
print(math.factorial(5)) # 120
print(math.sqrt(16)) # 4.0
print(math.ceil(4.2)) # 5
print(math.floor(4.8)) # 4
functools
🔗reduce(function, iterable)
: 여러 개의 데이터를 대상으로 주로 누적 집계를 내기 위해서 사용
from functools import reduce
# reduce(집계 함수, 순회 가능한 데이터[, 초기값])
# 리스트의 모든 요소를 합산
result = reduce(lambda x, y: x + y, [1, 2, 3, 4, 5])
print(result) # 15
# 리스트의 모든 요소를 곱셈
result = reduce(lambda x, y: x * y, [1, 2, 3, 4, 5])
print(result) # 120
일반적으로 코딩 테스트는 기본적인 문법과 내장 라이브러리의 활용을 다룬다. 따라서 외부 라이브러리를 전부 알 필요는 없지만, 몇 가지 외부 라이브러리들은 특정 문제를 해결할 때 매우 유용할 수 있으니 한 번 훑고 지나가는 것을 추천한다.
numpy
🧮다차원 배열 객체와 고수준의 수학 함수를 제공한다. 주로 배열 및 행렬 연산에 사용된다.
import numpy as np
arr = np.array([1, 2, 3])
print(arr + 1) # [2 3 4]
networkx
🌐복잡한 네트워크 그래프 분석에 사용된다. 그래프 이론 및 알고리즘 구현에 유용하다.
import networkx as nx
G = nx.Graph()
G.add_edge(1, 2)
G.add_edge(2, 3)
print(nx.shortest_path(G, 1, 3)) # [1, 2, 3]
sympy
✏️심볼릭 수학을 위한 라이브러리로, 대수 방정식 풀이, 미적분 계산 등에 사용된다.
from sympy import symbols, solve
x = symbols('x')
equation = x**2 - 4
solution = solve(e
Python
문법?이 글에서는 라이브러리에 대해 다루고 있지만, 혹시 문법에 대해 공부하고 싶다면 [Python] 코딩 테스트 필수 문법 글을 참고하자!