표준 라이브러리란 특정한 프로그래밍 언어에서 자주 사용되는 표준 소스코드를 미리 구현해 놓은 라이브러리를 의미한다.
코딩 테스트를 준비하면서 반드시 알아야 하는 라이브러리는 6가지 정도이다.
이 6가지 라이브러리 또한 각각 많은 기능을 포함하고 있어서 , 가장 중요하고 알아두어야 할 핵심 내용 요약
리스트와 같은 iterable 객체(파이썬에서 iterable 객체는, 반복 가능한 객체를 말한다. 리스트, 사전 자료형, 튜플 자료형 등이 이에 해당한다.)가 입력으로 주어졌을 때, 모든 원소의 합을 반환한다.
result = sum([1,2,3,4,5])
print(result) //15
파라미터가 2개 이상 들어왔을 때 가장 작은 값을 반환
result = min([7,3,5,2])
print(result) //2
파라미터가 2개 이상 들어왔을 때 가장 큰 값을 반환
result = max([7,3,5,2])
print(result). // 7
수학 수식이 문자열 형식으로 들어오면 해당 수식을 계산한 결과를 반환
ex) 문자열 형태로 주어진 수식 (3 + 5) *7 을 계산하는 소스코드는 다음과 같다
result = eval("(3 + 5) * 7")
print(result) // 56
iterable 객체가 들어왔을 때, 정렬된 결과를 반환한다. key 속성으로 정렬 기준을 명시할 수 있으며, reverse 속성으로 정렬된 결과 리스트를 뒤집을지의 여부를 설정할 수 있다.
# 오름차순으로 정렬
result = sorted([9,1,8,5,4[)
print(result) // [1,4,5,8,9]
# 내림차순으로 정렬
result = sorted([9,1,8,5,4], reverse = True)
print(result) // [9,8,5,4,1]
data = [9,1,8,5,4]
data.sort()
print(data) // [1,4,5,8,9]
from itertools import permutations
data = ['A' , 'B', 'C'] #데이터 준비
result = list[permutations(data, 3)). # 모든 순열 구하기
print(result)
from itertools import combinations
data = ['A' , 'B', 'C'] #데이터 준비
result = list[combinations(data, 2)). # 2개를 뽑는 모든 조합 구하기
print(result)
from itertools import product
data = ['A', 'B', 'C']
result = list(product(data , repeat = 2)) #2개를 뽑는 모든 순열 구하기(중복 허용)
print(result)
from itertools import combinations_with_replacement
data =['A' , 'B' , 'C']
result = list(combinations_with_replacement(data, 2)) #2개를 뽑는 모든 조합(중복 허용)
print(result)
파이썬에서는 힙 기능을 위해 heapq 라이브러리를 제공한다. heapq는 다익스트라 최단 경로 알고리즘을 포함해 다양한 알고리즘에서 우선순위 큐 기능을 구현하고자 할 때 사용
heapq 외에도 PriorityQueue 라이브러리를 사용할 수 있지만, 코딩 테스트 환경에서는 보통 heapq가 더 빠르게 동작하므로 heapq을 이용하도록 하자
파이썬의 힙은 최소 힙으로 구성되어 있으므로 단순히 원소를 힙에 전부 넣었다가 빼는 것만으로도 시간 복잡도 O(NlogN)에 오름차순 정렬이 완료된다. 보통 최소 힙 자료구조의 최상단 원소는 항상 '가장 작은'원소이기 때문
힙에 원소를 삽입할 때는 heapq.heappush() 메서드를 이용하고, 힙에서 원소를 꺼내고자 할 때는 heapq.heappop() 메서드를 이용한다.
<힙정렬을 heapq로 구현하는 예제>
import heapq
def heapsort(iterable):
h =[]
result =[]
# 모든 원소를 차례대로 힙에 삽입
for value in iterable:
heapq.heappush(h,vlaue)
# 힙에 삽입된 모든 원소를 차례대로 꺼내어 담기
for _ 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]
파이썬에선 최대 힙을 제공하지 않는다. 따라서 heapq 라이브러리를 이용하여 최대 힙을 구현해야 할 때는 원소의 부호를 입시로 변경하는 방식을 사용한다. 힙에 원소를 삽입하기 전에 잠시 부호를 반대로 바꾸었다가, 힙에서 원소를 꺼낸 뒤에 다시 원소의 부호를 바꾸면 된다. 이러한 방식으로 최대 힙을 구현하여 내림차순 힙 정렬을 구현하는 예시
import heapq
def heapsort(iterable):
h =[]
result = []
# 모든 원소를 차례대로 힙에 삽입
for value in iterable:
heapq.heappush(h, -value)
# 힙에 삽입된 모든 원소를 차례대로 꺼내어 담기
for _ 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)
ex) 정렬된 리스트 [1,2,4,4,8]이 있을 때 새롭게 데이터 4를 삽입하려 한다고 가정하자. 이때 bisect_left(a,4)와 bisect_right(a,4)는 각각 인덱스 값으로 2와 3를 반환한다.
deque는 첫 번째 원소를 제거할 때 popleft()를 사용하며, 마지막 원소를 제거할 때 pop()을 사용한다.
또한 첫 번째 인덱스에 원소 x를 삽입할 때 appendleft(x)를 사용하며, 마지막 인덱스에 원소를 삽입할 때 append(x)를 사용한다.
따라서 deque를 큐 자료구조로 이용할 때, 원소를 삽입할 때에는 append()를 사용하고 원소를 삭제할 때에는 popleft()를 사용하면된다. 그러면 먼저 들어온 원소가 항상 먼저 나가게 된다.
import math
print(math.factorial(5)) # 5 팩토리얼을 출력
import math
print(math.sqrt(7)) // 7의 제곱근을 출력
import math
print(math.gcd(21,14)) //7
import math
print(math.pi) # 파이(pi) 출력
print(math.e). # 자연상수 e 출력
많은 도움이 되었습니다, 감사합니다.