세상을 더 편리하게
article thumbnail
728x90

 알고리즘 문제를 풀면 순열과 조합을 쓸일이 있다.

구현하는 것도 나쁘지 않지만 시간이 급박할 때에는 직접구현보다는 라이브러리를 활용하는 것이 좋다.

import itertools

순열

서로 다른 n 개 중에 r개를 나열하는 경우의 수

import itertools

arr = ['1', '2', '3', '4']
per = list(itertools.permutations(arr, 2))

for ele in per:
	print(ele)
    
"""
('1', '2')
('1', '3')
('1', '4')
('2', '1')
('2', '3')
('2', '4')
('3', '1')
('3', '2')
('3', '4')
('4', '1')
('4', '2')
('4', '3')
"""

중복순열

중복 가능한 n개 중에 r개를 나열하는 경우의 수

import itertools

arr = ['1', '2', '3', '4']
per = list(itertools.product(arr, repeat=2))

for ele in per:
	print(ele)

"""
('1', '1')
('1', '2')
('1', '3')
('1', '4')
('2', '1')
('2', '2')
('2', '3')
('2', '4')
('3', '1')
('3', '2')
('3', '3')
('3', '4')
('4', '1')
('4', '2')
('4', '3')
('4', '4')
"""

조합

서로 다른 n개 중에 r개를 선택하는 경우의 수 (원소의 순서 고려 X)

import itertools

arr = ['1', '2', '3', '4']
com = list(itertools.combinations(arr, 2))

for ele in com:
	print(ele)

"""
('1', '2')
('1', '3')
('1', '4')
('2', '3')
('2', '4')
('3', '4')
"""

중복조합

중복 가능한 n개 중에 r개를 선택하는 경우의 수(원소의 순서 고려 X)

import itertools

arr = ['1', '2', '3', '4']
com = list(itertools.combinations_with_replacement(arr, 2))

for ele in com:
	print(ele)

"""
('1', '1')
('1', '2')
('1', '3')
('1', '4')
('2', '2')
('2', '3')
('2', '4')
('3', '3')
('3', '4')
('4', '4')
"""

모든 원소 조합

여러개의 리스트의 모든 조합하는 경우의 수

import itertools

arr1 = ['1', '2', '3', '4']
arr2 = ['A', 'B', 'C']
arr3 = ['ㄱ', 'ㄴ']
result = list(itertools.product(arr1, arr2, arr3))

for ele in result:
	print(ele)
"""
('1', 'A', 'ㄱ')
('1', 'A', 'ㄴ')
('1', 'B', 'ㄱ')
('1', 'B', 'ㄴ')
('1', 'C', 'ㄱ')
('1', 'C', 'ㄴ')
('2', 'A', 'ㄱ')
('2', 'A', 'ㄴ')
('2', 'B', 'ㄱ')
('2', 'B', 'ㄴ')
('2', 'C', 'ㄱ')
('2', 'C', 'ㄴ')
('3', 'A', 'ㄱ')
('3', 'A', 'ㄴ')
('3', 'B', 'ㄱ')
('3', 'B', 'ㄴ')
('3', 'C', 'ㄱ')
('3', 'C', 'ㄴ')
('4', 'A', 'ㄱ')
('4', 'A', 'ㄴ')
('4', 'B', 'ㄱ')
('4', 'B', 'ㄴ')
('4', 'C', 'ㄱ')
('4', 'C', 'ㄴ')
"""

 

728x90
profile

세상을 더 편리하게

@쵱니

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!