💡 먼저 모듈, 패키지, 라이브러리에 대해 짚고 넘어가보자
- 라이브러리 : 여러 패키지와 모듈을 모아둔 것
- 패키지 : 특정 기능을 하는 여러 모듈을 모아둔 것
- 모듈 : 함수와 변수, 클래스들을 모아둔 것. 일반적으로 파일 하나(
모듈.py
)가 모듈이다.즉,
라이브러리 >= 패키지 >= 모듈
이다.
참고로 특정 기업의 코딩테스트에서는 사용할 수 없는 라이브러리나 함수가 존재하기도 하니 단순히 암기하기보단 반드시 내부 동작 과정을 알고 이를 직접 구현할 줄 알아야한다. (ex. 삼성의 경우 itertools 사용 불가. 직접 백트래킹 등을 이용하여 구현하여야 함)
이제 파이썬의 1) 표준 라이브러리(빌트인 X) 와 2) 기본 내장 라이브러리의 내장 함수 들을 살펴보겠다.
permutation(순열)
: n개의 데이터를 뽑아 순서를 고려하여 나열product(중복순열)
: 중복 허용. n개의 데이터를 뽑아 순서를 고려하여 나열combination(조합)
: n개의 데이터를 뽑아 순서 상관없이 나열combination_with_replacement(중복조합)
: 중복 허용. n개의 데이터를 뽑아 순서 상관없이 나열직접 구현은 백트래킹 기법을 활용해 쉽게 구할 수 있으며 관련 포스팅을 참고해보자.
from collections import Counter
cnt = Counter(["hi", "hey", "hi", "hi", "hello", "hey"])
print(cnt) #Counter({'hi': 3, 'hey': 2, 'hello': 1})
pop()
, popleft()
from collections import defaultDict
d=defaultdict(int)
위와 같이 int로 디폴트값을 지정해주면,print(d[key]) # 0
값이 지정되지 않은 키는 그 값이 자동으로 0으로 초기화된다힙을 활용한 우선순위 큐 기능을 구현할 때 사용
오름차순 정렬의 시간복잡도는 O(NlogN)
PriorityQueue 라이브러리가 따로 있지만, heapq가 더 빠르게 동작함
heapq.heappush()
: 원소 삽입
heapq.heappop()
: 원소 꺼내기
최소힙
import heapq
def heapsort(iterable):
h = []
result = []
# 모든 원소를 차례대로 힙에 삽입
for value in iterable:
heapq.heappush(h, value)
# 힙에 삽입된 모든 원소를 차례대로 꺼내어 담기
for i in range(len(h)):
result.append(heapq.heappop(h))
return result
result = heapsort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])
print(result)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
최대힙
파이썬에서는 최대 힙을 제공하지 않으므로 아래와 같이 원소의 부호를 임시로 변경해서 사용해야한다.
import heapq
def heapsort(iterable):
h = []
result = []
# 모든 원소를 차례대로 힙에 삽입
for value in iterable:
heapq.heappush(h, -value)
# 힙에 삽입된 모든 원소를 차례대로 꺼내어 담기
for i in range(len(h)):
result.append(-heapq.heappop(h))
return result
result = heapsort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])
print(result)
# [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
O(logN)
에 정렬된 배열에 맞는 위치를 찾아준다from bisect import bisect_left, bisect_right
a = [1, 2, 4, 4, 8]
x = 4
print(bisect_left(a, x)) # 2
print(bisect_right(a, x)) # 4
math.factorial()
: 팩토리얼math.sqrt()
: 제곱근math.gcd()
: 최대공약수math.pi
: 파이math.e
: 자연상수