Lumpy Space Princess - Adventure Time
코딩테스트/이것이 코딩 테스트다

[이것이 코딩 테스트다] 파이썬 - 자주 사용되는 표준 라이브러리

yaebb_82 2022. 7. 22.

 

 

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

- 내장 함수

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

: 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) 계산

 

 

 

반응형

댓글