문자열이 주어졌을 때, 해당 문자열로 만들 수 있는 모든 순열(permutation)을 화면에 출력하는 것이 이번 예제의 목표입니다. 파이썬에서는 itertools 모듈의 내장 함수인 permutations()를 활용하면 복잡한 재귀 로직 없이도 아주 간단하게 해결할 수 있습니다.
예제
입력 : string = 'XYZ' 출력 : XYZ XZY YXZ YZX ZXY ZYX
알고리즘
전체적인 해결 과정은 다음과 같습니다.
1단계 : 문자열을 입력받는다. 2단계 : permutations() 함수를 사용해 문자열의 모든 순열을 생성한다. 3단계 : 생성된 순열을 하나씩 출력한다.
예제 코드
from itertools import permutations
def allPermutations(str1):
# 문자열의 모든 순열을 생성
per = permutations(str1)
# 모든 순열을 출력
print("Permutation Of this String ::>")
for i in list(per):
print(''.join(i))
# 메인 프로그램
if __name__ == "__main__":
str1 = input("Enter the string ::>")
allPermutations(str1)코드 설명
permutations(str1)은 입력된 문자열의 각 문자들을 재배치한 모든 경우의 수를 튜플 형태로 반환합니다.- 반환된 결과는 반복 가능한(iterable) 객체이므로
list()로 변환한 뒤 반복문으로 순회합니다. ''.join(i)를 사용해 튜플 형태의 문자들을 하나의 완성된 문자열로 합쳐서 출력합니다.
실행 결과
Enter the string ::> abc Permutation Of this String ::> abc acb bac bca cab cba
정리
길이가 n인 문자열의 순열 개수는 n!개입니다. 위 예제처럼 itertools.permutations()를 사용하면 직접 재귀 함수를 작성하지 않고도 효율적이고 가독성 높은 코드로 모든 순열을 손쉽게 구할 수 있습니다.