[Python] 문법 기초 - 순열과 조합

순열과 조합

  • 순열은 순서 상관있음. ‘CAB’ ≠ ‘CBA’

순열 라이브러리

from itertools import permutations

data = ['A', 'B', 'C']

result = list(permutations(data, 3))     # 모든 순열 구하기 (3개를 골라 순서 나열)
print(result)

조합 라이브러리

from itertools import combinations

data = ['A', 'B', 'C']

result = list(combinations(data, 2))
print(result)

중복 순열과 중복 조합

  • product 라이브러리 - 중복 순열 구할 때
  • combinations_with_replacement 라이브러리 - 중복 조합 구할 때
from itertools from product

data = ['A', 'B', 'C']

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

from itertools import combinations_with_replacement

data = ['A', 'B', 'C']

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

Counter 라이브러리

  • 파이썬 collections 라이브러리의 Counter는 등장 횟수를 세는 기능을 제공함.
  • 리스트와 같은 반복 가능한 객체가 주어졌을 때, 내부의 원소가 각각 몇번씩 등장했는지 알려준다.
from collections import Counter

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

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

최대 공약수와 최소 공배수

  • math 라이브러리를 활용하면 된다. 최대공약수는 gcd(), 최소공배수는 직접 만들어줘야 함.
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) 계산