[이것이 코딩 테스트다] 파이썬 - 자주 사용되는 표준 라이브러리
실전에서 유용한 표준 라이브러리
- 내장 함수
: 기본 입출력 ~ 정렬 함수까지 기본적인 함수들 제공
: import 구문 없이 사용 가능한 함수들 (print, input, ... 등등)
: 없어서는 안되는 필수적인 기능들을 포함
- itertools
: 파이썬에서 반복되는 형태의 데이터 처리하기 위한 유용한 기능들 제공
: 순열과 조합 라이브러리(완전 탐색 문제) 자주 사용 (모든 경우의 수를 고려해야 할 때 효과적으로 사용)
- heapq
: 힙(Heap) 자료구조를 제공
: 우선순위 큐 기능을 구현하기 위해 사용(다익스트라 와 같은 최단경로 문제)
- bisect
: 이진 탐색 기능을 제공
- collections
: 덱(deque), 카운터(counter) 등의 유용한 자료구조를 포함
- math
: 필수적인 수학적 기능을 제공
: 팩토리얼, 제곱근, 최대공약수, 삼각함수 관련 함수 ~ 파이(pi) 같은 상수 포함
[ 내장함수 ]
1) sum
: 리스트나 튜플 등이 들어왔을 때, 원소들의 합을 반환
result = sum([1, 2, 3, 4, 5])
print(result)
2) min / max
: 가장 작은 값 / 가장 큰 값 반환
min_value = min(1, 4, 7, 8)
max_value = max(1, 4, 7, 8)
print(min_value, max_value)
3) eval
: 사람의 입장에서 수식으로 표현된 식이 있을 때, 그것을 계산한 값을 반환
value = eval("(3+5)*7")
print(value)
4) sorted
: 리스트와 같은 반복 가능한 객체들이 들어왔을 때 정렬한 값을 반환
result = sorted([1, 2, 5, 7, 9])
print(result)
reverse_result = sorted([1, 2, 5, 7, 9], reverse=True)
print(reverse_result)
cf.) reverse=True 는 내림차순으로 정렬을 해준다.
: 키 속성으로도 정렬이 가능하다.
array = [('홍길동', 50), ('이순신', 20), ('김유신', 30)]
result = sorted(array, key=lambda x: x[1], reverse=True)
print(result)
cf.) 키 속성으로 정렬할 때, lambda 함수로 한 줄로 간결하게 넣어주는 형태가 많다.
cf.) reverse=True 는 내림차순으로 정렬을 해준다.
[ 순열과 조합 ]
Q. 모든 경우의 수를 고려해야 할 때 어떤 라이브러리를 효과적으로 사용?
A. itertools 라이브러리!
- 순열 : 서로 다른 n개에서 서로 다른 r개를 선택하여 일렬로 나열 → 공식 : nPr (P : permutations)
ex) A, B, C 에서 3개를 골라 나열하는 경우의 수 : ABC, ACB, BAC, BCA, CAB, CBA
→ 순서를 고려하기 때문에 CAB와 CBA가 다른 것
from itertools import permutations
data = ['A', 'B', 'C'] #데이터 준비
result = list(permutations(data, 3)) #3개를 골라 모든 순열 구하기
print(result)
- 조합 : 서로 다른 n개에서 순서에 상관없이 서로 다른 r개를 선택하는 것 → 공식 : nCr (C: combinations)
ex) A, B, C 에서 순서를 고려하지 않고 두개를 뽑는 경우의 수 : AB, AC, BC
from itertools import combinations
data = ['A', 'B', 'C'] #데이터 준비
result = list(combinations(data, 2)) #2개를 골라 모든 조합 구하기
print(result)
- 중복 순열 (product 라이브러리 사용)
from itertools import product
data = ['A', 'B', 'C']
result = list(product(data, repeat=2)) #2개를 골라 모든 순열 구하기 (중복 허용)
print(result)
- 중복 조합 (combinations_with_replacement 라이브러리 사용)
from itertools import combinations_with_replacement
data = ['A', 'B', 'C']
result = list(combinations_with_replacement(data, 2)) #2개를 골라 모든 조합 구하기 (중복 허용)
print(result)
[ Counter ]
: 파이썬 collections 라이브러리의 Counter는 등장 횟수를 세는 기능을 제공
: 리스트와 같은 반복 가능한 객체가 주어졌을 때, 내부 원소가 몇 번 등장했는지 알려준다.
from collections import Counter
counter = Counter([1, 2, 3, 1, 2, 3, 4, 1, 2])
print(counter[1]) #1이 등장한 횟수 출력
print(counter[2])
print(counter[3])
print(counter[4])
print(dict(counter)) #사전 자료형으로 반환
[ 최대 공약수 / 최소 공배수 ]
: 최대 공약수를 구할 때에는 math 라이브러리의 gcd() 함수를 이용
: 최소 공배수를 구할 때에는 lcm() 함수를 이용
cf.) gcd = greatest common divisor = 최대 공약수
cf.) lcm = least(lowest) common multiple = 최소 공배수
import math
#최소 공배수(LCM)를 구하는 함수
def lcm(a, b):
return a*b // math.gcd(a, b) # // : 몫 연산자
a = 20
b = 4
print(math.gcd(a, b)) #최대 공약수(GCD) 계산
print(lcm(a, b))#최소 공배수(LCM) 계산
'코딩테스트 > 이것이 코딩 테스트다' 카테고리의 다른 글
[이것이 코딩 테스트다] 구현 - 시뮬레이션과 완전 탐색 (1) | 2022.09.28 |
---|---|
[이것이 코딩 테스트다] 그리디 알고리즘 (0) | 2022.09.28 |
[이것이 코딩 테스트다] 파이썬 - 함수와 람다 표현식 (0) | 2022.07.22 |
[이것이 코딩 테스트다] 파이썬 - 반복문 (0) | 2022.07.22 |
[이것이 코딩 테스트다] 파이썬 - 조건문 (0) | 2022.07.22 |
댓글