코딩테스트 할 때, 자주 사용하는 라이브러리를 정리해봤습니다
from collections import deque
: BFS 문제 풀 때 사용, 데이터 출입이 양 끝에서 이루어짐
- 선언 : dq = deque()
- 사용 : 기존 리스트 사용방법에 dq.popleft(), dq.appendleft() 함수 추가
- pop(0)를 사용할 수 있지만 popleft()가 더 빠름
from collections import defaultdict
: 키/값이 존재하지 않는 경우에 대한 처리를 해야 하는 경우
: 이걸 쓰지 않으면 어떤 원소가 배열에 들어 있는지 확인하는 조건문을 추가해야한다.
- 선언 : graph = defaultdict(list) , dict = defaultdict(set)
- 추가 : graph.append(), dict.add()
import heapq
: 정렬된 데이터 배열을 사용하기 위해 사용하는 모듈로, 이진트리 기반 최소 힙 자료구조입니다.
- 선언 : h = [] # 일반 배열 선언과 동일
- 원소 추가 : heapq.heappush(h, 4)
- 원소 삭제 : heapq.heappop(h)
- 일반 배열을 힙 자료구조로 변환 : heapq.heapify(list명)
from queue import PriorityQueue (heapq 랑 기능 똑같음)
: 리스트에 원소를 추가할 때마다 우선순위에 따라 추가된다.
- 선언 : q = PriorityQueue()
- 원소 추가 : q.put(1)
- 원소 삭제 : q.get() # heap 이 기본이므로 FIFO! 가장 앞에 있는 원소가 삭제된다.
- 옵션 : maxsize # q = PriorityQueue(maxsize=3)
자주 사용되는 기법이나 주의해야 할 점을 정리해보았습니다.
리스트 복사 - 얕은 복사 vs 깊은 복사
a = [1, 2, 3]
b = a
b[0] = 4
print(a)
# 출력
# [4, 2, 3]
mutable한 객체(listm, set, dict)에서 얕은 복사(b=a)를 하면 같은 메모리 주소를 바라보기 때문에 의도한 대로 b의 값만 바꾸는 것이 안된다.
따라서 이런 경우, from copy import deepcopy 를 이용하여 깊은 복사를 하는 방법과 슬라이싱을 하는 방법이 있다.
a = [1, 2, 3]
b = a[:]
b[0] = 4
print(a, b)
# 출력
# [1, 2, 3] [4, 2, 3]
'개인 공부 > 코딩테스트' 카테고리의 다른 글
[Python, 이진탐색][프로그래머스] 입국심사 :: seoftware (0) | 2021.05.09 |
---|---|
[Python][프로그래머스] 멀쩡한 사각형 :: seoftware (0) | 2021.05.09 |
[Python, 완전탐색][프로그래머스] 자물쇠와 열쇠 :: seoftware (0) | 2021.05.08 |
[Python, 재귀][프로그래머스] 괄호 변환 :: seoftware (0) | 2021.05.07 |
[Python, 문자열][프로그래머스] 문자열 압축 :: seoftware (0) | 2021.05.07 |
댓글