/ PYTHON

(Python) 순열(permutations)과 조합(combinations)


순열이란

순열은 순서를 신경 쓰면서 뽑는 방식이다. 예를들어 1, 2, 3이라는 숫자가 존재할때 중복없이 3개를 뽑는 순열을 구할때는 아래와 같이 값이 나온다

1, 2, 3
(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)


중복없이 2개를 뽑는 순열을 구할때는 아래와 같은 값이 나온다

1, 2, 3
(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2) 


파이썬에서는 함수를 사용하여 간단하게 위의 값들을 구할 수 있다. itertools에서 제공해주는 permutations 함수를 사용하면 된다. 사용법도 간단하다. 하지만 이러한 함수는 시간복잡도면에서 굉장히 비효율적이다. 즉 코딩테스와 같은 효율성을 따지는 곳에서는 사용하기엔 힘든면이 있다 (사용해보고 효율성에서 걸릴것 같다면 빨리 경로를 바꿔야한다..^^)

from itertools import permutations
        
items = ['1', '2', '3']
print(list(map(''.join, permutations(items, 2)))) # (1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2) 
print(list(map(''.join, permutations(items, 2)))) # (1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)


조합이란

조합은 순서에 상관없이 뽑는 방식이다. 예를들어 1, 2, 3이라는 숫자가 존재할때 1, 2, 3에서 중복없이 3개를 뽑는 조합을 구하면 (1, 2, 3) 이 한가지 경우밖에 나오지 않는다

from itertools import combinations

items = ['1', '2', '3']
# for i in range(1, len(items)):
print(list(map(''.join, combinations(items,2)))) # ['12', '13', '23']


해당 함수들을 사용후 print(combinations(items,2)) 와 같이 출력하면 객체가 출력되기 때문에 알맞게 데이터를 가공해서 사용하면 된다 !