-
백준 #10974 - 모든 순열알고리즘 2024. 4. 15. 22:29
문제
N이 주어졌을 때, 1부터 N까지의 수로 이루어진 순열을 사전순으로 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 N(1 ≤ N ≤ 8)이 주어진다.
출력
첫째 줄부터 N!개의 줄에 걸쳐서 모든 순열을 사전순으로 출력한다.
예제 입력
3
예제 출력
1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
이 문제는 파이썬의 itertools를 활용하면 아주 간단하게 풀린다.
1) combinations(iterable, r) : iterable에서 원소 개수가 r개인 조합 뽑기
- 조합은 중복을 허용하지 않는다
for i in combinations(l,2): print(i) ''' (1, 2) (1, 3) (2, 3) '''
2) permutations(iterable, r) : iterable에서 원소 개수가 r개인 순열 뽑기
- r을 지정하지 않거나, r=None으로 하면 최대 길이의 순열이 리턴
- 순열은 중복을 허용한 모든 경우의 수를 의미한다
for i in permutations(arr, 3): print(i) ''' ('A', 'B', 'C') ('A', 'C', 'B') ('B', 'A', 'C') ('B', 'C', 'A') ('C', 'A', 'B') ('C', 'B', 'A') '''
둘 다
import itertools 후
itertools.combinations 혹은 itertools.permutations 형식으로 사용하면 된다.
그렇다면 위 문제는 다음과 같이 간단하게 해결이 가능하다.
import sys import itertools input = sys.stdin.readline n = int(input()) arr = [] for i in range(1, n + 1): arr.append(i) comb = itertools.permutations(arr, n) comb_list = list(comb) for i in comb_list: one_comb = str(i) one_comb = one_comb.replace("(", "").replace(",", "").replace(")", "") print(one_comb)
'알고리즘' 카테고리의 다른 글
백준 #2193 - 이친수 (0) 2024.04.26 백준 #1463 - 1로 만들기 (2) 2024.04.18 백준 #2108 - 통계학 (0) 2024.04.13 백준 #1735 - 분수 합 (0) 2024.04.13 백준 #12865 - 평범한 배낭 (0) 2024.04.09