정렬
arr = [(1,2),(2,3), (1,1)]
arr.sort() # 일반적으로 처음인자부터 차례로 정렬 nlogn
arr.sort(key=lambda x:x[1],x[0]) # 두번째 인자 우선순위로 정렬
arr.sort(key=lambda x:x[0], reverse=True) # 첫번째 인자 기준으로 반대로 정렬
곱집합, 조합, 순열
from itertools import product
product([1,2,3],['a','b','c','d']) # 하나씩 선택하는 모든 케이스(곱집합)가 만들어진다.
from itertools import combinations
combinations(iterable, r=None) # 조합 구하기
from itertools import permutations
permutations(iterable, r=None) # 순열조합 구하기
큐
from collections import deque
q = deque([])
q.append(1)
q.append(2)
q.pop() # 2를 반환
q.popleft() # 왼쪽에 있는 데이터 1 반환
q.clear() # 모든 데이터 제거
우선순위 큐 (최소힙, 최대힙으로 사용하려면 -붙이고 사용)
import heapq
q = []
heapq.heappush(q, 1)
heapq.heappop(q)
q=[3,5,1,2,5,7]
heapq.heapify(q) # iterable 객체를 최소힙으로 만든다.
이분탐색
import bisect
arr = [1,2,4,6,8,10] # 정렬된 list
bisect.bisect_left(arr,6) # 6이 들어가야하는 Index 3 을 반환
bisect.bisect_rigt(arr,2) # 2가 들어가야하는 Index 2 를 반환
수학관련
import math
math.gcd(12, 48) # 최대 공약수를 반환
lcm = A*B // math.gcd(A,B) # 두수의 곱 나누기 공약수는 최소공배수
math.ceil(2.5) # 올려해서 3
math.floor(2.5) # 내림해서 2
재귀
import sys
sys.setrecursionlimit(10000)