이번에는 파이썬 문법들 중, 자주 사용되는 표준 라이브러리들에 대해 다뤄보자.
내장 함수는 쭉 자주 다뤘기에 놓치면 안되는 부분들에 대해 조금 정리해보자.
eval()함수는 사람의 입장에서 수식으로 표현된 하나의 식이 있을 때, 계산한 결과를 실제 수 형태로 반환하는 함수다.
코드로 보면 이해가 잘 될 것이다.

앞선 [코테] 코딩테스트 준비 (2) 글에서 다뤘던 내용이지만 중요하기에 다시 한번 정리해보자.
reverse=Truesorted를 내림차순으로 정렬하고자 한다면 reverse=True 속성을 달아주면 된다. result=sorted([1,3,5,4,2])
r_result=sorted([1,3,5,4,2], reverse=True)
print(result) # [1,2,3,4,5]
print(r_result) # [5,4,3,2,1]
keykey를 통해 정렬 기준을 명시해 줄 수 있는데, 정렬 기준은 일반적으로 lambda 함수 형태로 간단하게 넣어주는 경우가 많다. arr=[("a",3), ("b",1), ("c",2)]
print(sorted(arr, key=lambda x: x[1], reverse=True)) # [("a",3), ("c",2), ("b",1)]
순열과 조합을 구하는 방법에 대해 알아보자.
모든 가능한 경우의 수를 빠짐없이 조사하여 최적의 답을 찾는 완전탐색 알고리즘 문제를 풀 때 itertools 라이브러리를 이용하면 코드를 간결하게 만들 수 있도록 도와준다.
이처럼 itertools는 파이썬에서 반복되는 형태의 데이터를 처리하기 위한 기능들을 제공하는 라이브러리다.
순열(Permutation)과 조합(Combination)의 차이는 순서에 있다.
위와 같은 공식을 이용하여 모든 경우의 수가 얼마나 될지를 짐작해서 해당 문제를 풀기위해서 모든 조합을 고려하는 방법이 통할지 안통할지를 짐작하는 방식을 사용한다.
순열의 수를 구해봤을 때 값이 1천만 1억을 넘어가는 경우, 완전 탐색을 이용했을 때 시간초과 판정을 받을 확률이 높기 때문에, 실제로 전체 경우의 수를 고려할 때 이러한 순열의 수와 조합의 수를 많이 계산하게 된다.
from itertools import permutations, combinations
lst=["A","B","C"]
p_result=list(permutations(lst,3))
c_result=list(combinations(lst,2))
print(p_result) # [('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]
print(c_result) # [('A', 'B'), ('A', 'C'), ('B', 'C')]
from itertools import product, combinations_with_replacement
lst=["A","B","C"]
p_result=list(product(lst,repeat=2))
c_result=list(combinations_with_replacement(lst,2))
print(p_result) # [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('C', 'A'), ('C', 'B'), ('C', 'C')]
print(c_result) # [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]
힙(Heap) 자료구조를 제공하는 라이브러리다.
이는 다익스트라(Dijkstra)와 같은 최단경로 알고리즘과 같은, 우선순위 큐(Priority Queue) 기능을 구현하기 위해 사용된다.
이진 탐색(Binary Search) 기능을 제공하는 라이브러리다.
덱(deque), 카운터(Counter)와 같은 유용한 자료구조를 포함하는 라이브러리다.
from collections import Counter
counter = Counter(["red", "blue", "green", "red", "red", "RED"])
print(counter["red"]) # 3
print(dict(counter)) # {'red': 3, 'blue': 1, 'green': 1, 'RED': 1}
다양한 수학적 기능을 제공하는 라이브러리다.
다양한 함수들 중 최대 공약수(GCD(Greatest Common Divisor))와 이 최대 공약수를 이용해 최소 공배수(LCM(Least Common Multiple))를 구하는 방법을 보면 다음과 같다.
최대 공약수: 공통된 약수 중 가장 큰 값
최소 공배수: 공통된 배수 중 가장 작은 값
import math
# 최소 공배수(LCM) 구하는 공식
def lcm(a,b):
return a*b //math.gcd(a,b)
a=21
b=14
print(math.gcd(21,14)) # 7
print(lcm(21,14)) # 42