[이코테] 2. 파이썬 문법 부수기 - (7). 자주 사용되는 표준 라이브러리
Algorithm/이코테2021

[이코테] 2. 파이썬 문법 부수기 - (7). 자주 사용되는 표준 라이브러리

반응형

 

 

실전에서 유용한 표준 라이브러리

 

내장함수

별도 import 구문 없이 사용할 수 있는 함수 = 내장 함수(ex. input(), print() ... )

기본 입출력 함수 ~ 정렬 함수까지 '기본적인' 함수 제공

파이썬 프로그래밍시 없어서는 안되는 필수적인 기능 포함.

 

itertools

파이썬에서 반복되는 형태의 데이터 처리하기 위한 유용한 기능들 제공.

특히 순열과 조합 라이브러리는 코딩 테스트에서 자주 사용.

순열과 조합 라이브러리는 완전 탐색 문제 유형에서 소스코드를 매우 간결하게 작성하도록 도와줌.

모든 경우의 수 고려해야하는 상황에서 효과적으로 사용 될 수 있음.

 

heapq (추후 강의에서 다룸)

힙(heap) 자료구조를 제공.

일반적으로 우선순위 큐 기능을 구현하기 위해 사용됨.

대표적으로 다익스트라(Dijkstra)와 같은 최단 경로 알고리즘에서 많이 활용됨.

 

bisect (추후 강의에서 다룸)

이진 탐색(Binary Search) 기능 제공

기본적인 이진 탐색 기능 필요할 때 bisect 라이브러리 효과적으로 사용할 수 있음.

 

collection

덱(deque), 카운터(Counter) 등의 유용한 자료구조를 포함.

 

math

필수적인 수학적  기능 제공

팩토리얼, 제곱근, 최대공약수(GCD), 삼각함수 관련 함수부터 파이(pi)와 같은 상수 포함.

 

 

 

 

 

자주 사용되는 내장함수

#자주 사용되는 내장함수

# sum() = (다수의 데이터를 포함하는) 리스트나 튜플들이 들어왔을 때 그 원소의 합을 반환
result = sum([1, 2, 3, 4, 5])
print(result)

# min(), max()
min_result = min(7, 3, 5, 2)
max_result = max(7, 3, 5, 2)
print(min_result, max_result)

# eval() = 사람의 입장에서 수식으로 표현된 식이 있을 때 그 것을 계산해서 숫자로 반환.
result = eval("(3+5)*7")
print(result)

# sorted()
result = sorted([9, 1, 8, 5, 4]) # 오름차순
reverse_result = sorted([9, 1, 8, 5, 4], reverse = True) # 내림차순
print(result)
print(reverse_result)

# sorted() with key
array = [('홍길동', 35), ('이순신', 75), ('조랭이떡', 50)]
result = sorted(array, key = lambda x: x[1], reverse = True)
#key는 정렬 기준인데, 일반적으로 lambda를 활용해서 넣는 경우가 많다.
print(result)


'''output
15
2 7
56
[1, 4, 5, 8, 9]
[9, 8, 5, 4, 1]
[('이순신', 75), ('조랭이떡', 50), ('홍길동', 35)]
'''

 

 

 

 

 

Itertools

모든 경우의 수를 고려해야 할 때 효과적인 라이브러리.

 

 

순열 (Permutation)

서로 다른 n개에서 서로 다른 r개를 선택하여 일렬로 나열하는 것.

  • {'A', 'B', 'C'}에서 세 개를 선택하여 나열하는 경우
    • 'ABC', 'ACB', 'BAC', 'BCA', 'CAB', 'CBA'
  • 이 처럼, 순열은 순서를 고려하기 때문에 여러 가지 나옴.
from itertools import permutations

data = ['A', 'B', 'C'] # 데이터 준비.

result = list(permutations(data, 3)) # 모든 순열 구하기.
print(result)

'''output
[('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]
'''

 

 

조합 (Combination)

서로 다른 n개에서 순서에 상관 없이 서로 다른 r개를 선택하는 것.

  • {'A', 'B', 'C'}에서 순서를 고려하지 않고 두 개를 뽑는 경우
    • 'AB', 'AC', 'BC'
from itertools import combinations

data = ['A', 'B', 'C'] # 데이터 준비.

result = list(combinations(data, 2)) # 2개를 뽑는 모든 조합 구하기
print(result)

'''output
[('A', 'B'), ('A', 'C'), ('B', 'C')]
'''

위 공식을 활용해서, 모든 경우의 수가 얼마나 될 지 유추해서 해당 문제를 풀기 위해서 모든 경우의 수를 활용한 방법이 통할지 안통할지를 '짐작'하는 방식을 많이 활용 함.

ex. 순열의 수가 1,000만, 1억 단위를 넘어간다면? 완전 탐색을 이용했을 때, 시간 초과 판정을 받을 확률이 높다. (이런식)

 

 

중복 순열과 중복 조합

길게 설명 안하고 코드만 보여주고 넘어감

 

중복 순열

from itertools import product #중복 순열

data = ['A', 'B', 'C'] # 데이터 준비.

result = list(product(data, repeat=2)) # 2개를 뽑는 모든 순열 구하기(중복허용)
print(result)

'''output
[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('C', 'A'), ('C', 'B'), ('C', 'C')]
'''

 

중복 조합

from itertools import combinations_with_replacement

data = ['A', 'B', 'C'] # 데이터 준비.

result = list(combinations_with_replacement(data, 2)) # 2개를 뽑는 모든 순열 구하기(중복허용)
print(result)

'''output
[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]
'''

 

 

 

 

 

collections

 

Counter

파이썬 collections 라이브러리의 Counter는 등장 횟수를 세는 기능을 제공함.

리스트와 같은 반복 가능한(iterable) 객체가 주어졌을 때 내부의 원소가 몇 번씩 등장했는지를 알려줌.

from collections import Counter

counter = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])

print(counter['blue']) # blue가 등장한 횟수 출력
print(counter['green']) # green이 등장한 횟수 출력
print(dict(counter)) # 사전 자료형 반환

'''output
3
1
{'red': 2, 'blue': 3, 'green': 1}
'''

흔히 파이썬으로 Word Cloud같은 프로그램을 만들 때 많이 사용하는 라이브러리다.

 

 

 

 

 

math

최대 공약수를 구해야 할 때는 math 라이브러리의 gcd() 함수를 이용할 수 있음.

*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)) # 최대 공약수(GCD) 계산
print(lcm(21, 14)) # 최소 공배수(LCM) 계산

'''output
7
42
'''

 

이 밖에도 math 라이브러리는 팩토리얼, 제곱근, 원주율 등등 을 가지고 있다.

 

 

 

 

 

 


이코테 2021 시리즈 씹어먹기 by 조랭이떡

시리즈 목차

더보기
  1. 코딩테스트 출제 경향 및 알고리즘 성능 평가
  2. 파이썬 문법 부수기
    1. 수, 리스트 자료형
    2. 문자열, 튜플, 사전, 집합 자료형
    3. 기본 입출력
    4. 조건문
    5. 반복문
    6. 함수와 람다 표현식
    7. 자주 사용되는 표준 라이브러리
  3. 그리디
    1. 그리디 알고리즘이란?
    2. 거스름돈
    3. 1이 될 때 까지
    4. 곱하기 혹은 더하기
    5. 모험가 길드
  4. 구현
  5. DFS & BFS (추후링크)
  6. 정렬 알고리즘 (추후링크)
  7. 이진 탐색 (추후링크)
  8. 다이나믹 프로그래밍 (추후링크)
  9. 최단 경로 알고리즘 (추후링크)
  10. 기타 그래프 이론 (추후링크)
  11. 코딩 테스트에서 자주 출제되는 기타 알고리즘 (추후링크)
  12. 개발형 코딩 테스트 (추후링크)

 

반응형