알고리즘 공부를 위해 python으로 PS(problem solving)을 하려고 한다.
그래서 파이썬을 정리해 본다.
출처 : 3.9.1 Documentation (python.org)
코딩테스트에 유용한 표준 라이브러리를 알아보자
검색해보니
내장 함수
itertools : 순열, 조합
heapq : 이미 한번 정리했던 내용. priority queue
bisect : 이진 탐색 기능을 제공
collections : deque가 들어있는 라이브러리 이미 한번 정리했다.
math : 필수적인 수학적 기능 제공
이 라이브러리들이 유용하다는 것을 알 수 있었다.
이 중 이미 정리했던 라이브러리를 제외한 내장 함수,itertools, math, bisect, 라이브러리를 알아보자
1. 내장함수
sorted(iterable) : iterable의 항목들로 정렬된 리스트 카피를 반환
sorted(iterable, reverse=True): 위와 동일하나 역으로 정렬
sort() : 내장함수는 아니지만 iist.sort() 로 보통 자료형에 내장되어있다. list 자체를 재정렬한다.
abs(x) : x의 절대값 반환. fabs는 2 → 2.0 float이고 abs는 2 → 2 로 int이다.
sum(iterable) : iterable 항목들의 합계를 반환
float(x) : 숫자 또는 문자열 x를 실수로 변환해 반환
type(object) : 타입을 반환
int(s) : 문자열 s를 숫자 자료형으로 변환
str(x) : 숫자 자료형 x를 문자열로 변환
len(s) : 객체의 길이를 반환
max(iterable) : 배열 중 가장 큰 것 반환
max(a, b) : a, b 중 큰 것 반환
min(iterable) : 배열 중 가장 작은 것 반환
min(a, b) : a, b 중 작은 것 반환
a ** b : a의 b승, 내장함수의 pow와 math.pow 함수보다 빠르다.
2. itertools
itertools.permutations('ABCD', 2) : 순열
> AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD
itertools.combinations('ABCD', 2) : 조합
> AB AC AD BA BC BA CA CB CD DA DB DC
itertools.product('ABCD', 2) : 중복 순열
> AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD
itertools.combinations_with_replacement('ABCD', 2) : 중복 조합
> AA AB AC AD BB BC BD CC CD DD
3. math
함수 | 설명 | 양수 | 음수 |
math.fabs(x) | 실수 x의 절대값 반환 | 2 → 2.0 | -2.1 → 2.1 |
math.ceil(x) | x 올림 | 2.1 → 3 | -2.1 → -2 |
math.floor(x) | x 내림 | 2.1 → 2 | -2.1 → -3 |
math.trunc(x) | x 버림 | 2.1 → 2 | -2.1 → -2 |
math.round(x, n) | n번째 소숫점까지 반올림 | round(0.466666666, 4) → 0.4667 / 내장 함수이나, 옮김. |
|
math.sqrt(x) | x 의 제곱근 반환 | ||
math.factorial(x) | x의 팩토리얼 x! | 5 → 5 * 4 * 3 * 2 * 1 | valueError |
math.gcd(list) | 최대 공약수 | 음수가 있어도 나눌 수 있는가장 큰 양수 반환. 모두 0이면 0 | |
math.lcm(list) | 최소 공배수 | 어느 하나가 0이면 0반환. empty list면 1 반환 (3.9버전) | |
math.comb(n, k) | n개 중 k개를 뽑는 조합 수 | 정수가아니면 typeError | ValueError |
math.perm(n, k) | n개 중 k개를 뽑는 순열 수 | 정수가아니면 typeError | ValueError |
4. bisect
bisect.bisect_left(a, x) : 정렬된 순서를 유지하도록 a에 x를 삽입할 위치를 찾는다. x가 a에 있으면 왼쪽에 삽입
bisect.bisect_right : bisect_left와 동일하지만 오른쪽 위치를 찾는다.
bisect.bisect : bisect_right와 동일
bisect.insort_left : a에 x를 정렬된 순서로 삽입한다. a.insert(bisect.bisect_left(a, x, lo, hi), x)와 동등
bisect.insort_right : insort_left와 비슷하지만 a에 x를 기존 항목 오른쪽에 삽입
bisect.insort : insort_right와 동일
이진 검색 알고리즘을 이용해서 시퀀스를 검색하고, 시퀀스에 항목을 삽입할수 있는 함수를 제공
미리 정렬된 배열이 필요하다.
import bisect sequence = [1, 3, 4, 5]
print(bisect.bisect_right(sequence, 3)) >> index 2
> 3을 찾고 3의 오른쪽 위치 index를 반환
print(bisect.bisect_left(sequence, 3)) >> index 1
> 3을 찾고 3의 왼쪽 위치 index를 반환
'Language > Python' 카테고리의 다른 글
파이썬(Python) 정리 - 7. deque, heapq 내장 함수 및 메소드 (0) | 2020.12.13 |
---|---|
파이썬(Python) 정리 - 6. String 문자열 메소드 (0) | 2020.12.13 |
파이썬(Python) 정리 - 5. 리스트, 셋, 딕셔너리 내장 함수 및 메소드 (0) | 2020.12.13 |
파이썬(Python) 정리 - 4. 얕은복사와 깊은 복사 (0) | 2020.12.12 |
파이썬(Python) 정리 - 3. 함수 (0) | 2020.12.12 |
댓글