본문 바로가기

알고리즘/백준

[Python] 순열(permutations) & 조합(combinations)

파이썬 순열(permutations)과 조합(combinations)
브루트포스, BFS 알고리즘을 풀 때 많이 사용된다.

 

 

 

itertools — Functions creating iterators for efficient looping

This module implements a number of iterator building blocks inspired by constructs from APL, Haskell, and SML. Each has been recast in a form suitable for Python. The module standardizes a core set...

docs.python.org

 

product('ABCD', repeat=2) AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD
permutations('ABCD', 2) AB AC AD BA BC BD CA CB CD DA DB DC
combinations('ABCD', 2) AB AC AD BC BD CD
combinations_with_replacement('ABCD', 2) AA AB AC AD BB BC BD CC CD DD

 

 

순열 (permutations)

서로 다른 n개에서 r개를 선택할 때 순서를 고려하여 중복없이 뽑을 경우의 수 (nPr = n! / (n-r)!)

순서를 고려하기 때문에 AB != BA로 본다.

 

Usage python

  • permutations(obj, r) : 반복가능한 객체 안에서 r개 선택 (list, tuple, string)
  • from itertols import permutations
  • tuple(x, y) 형식으로 리턴
from itertools import permutations

arr = ["A", "B", "C", "D"]

for i in permutations(arr, 2):
    print(i)

# result
('A', 'B')
('A', 'C')
('A', 'D')
('B', 'A')
('B', 'C')
('B', 'D')
('C', 'A')
('C', 'B')
('C', 'D')
('D', 'A')
('D', 'B')
('D', 'C')

 

 

조합 (combinations)

서로 다른 n개에서 r개를 선택할 때 순서를 고려하지 않고 중복없이 뽑을 경우의 수 (nCr = n! / (n-r)!)

순서를 고려하지 않기 때문에 AB = BA로 본다.

 

Usage python

  • combinations(obj, r) : 반복가능한 객체 안에서 r개 선택 (list, tuple, string)
  • from itertols import combinations
  • tuple(x, y) 형식으로 리턴
from itertools import combinations

arr = ["A", "B", "C", "D"]

for i in combinations(arr, 2):
    print(i)
    
# result
('A', 'B')
('A', 'C')
('A', 'D')
('B', 'C')
('B', 'D')
('C', 'D')

 

 

 

 

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 17413 단어 뒤집기 2  (0) 2024.05.20
[백준] 3085 사탕 게임  (0) 2024.05.12
[백준] 7568 덩치  (1) 2024.05.02
[백준] 1158 요세푸스 문제  (0) 2024.04.29
[백준] 5430 AC  (1) 2024.04.21