[백준(python)] 10974번: 모든 순열

세하·2023년 11월 3일

[백준] 문제풀이

목록 보기
28/94
post-thumbnail

10974번: 모든 순열

문제

N이 주어졌을 때, 1부터 N까지의 수로 이루어진 순열을 사전순으로 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 N(1 ≤ N ≤ 8)이 주어진다.

출력

첫째 줄부터 N!개의 줄에 걸쳐서 모든 순열을 사전순으로 출력한다.

풀이 (브루트포스 알고리즘)

import sys
sys.setrecursionlimit(100001) #재귀호출 리밋 해제

num = int(input())
data = [i for i in range(1, num+1)]
lastList = sorted(data, reverse=True) #가장 마지막 순열을 담고있음

def permuFun(list):
    print(*list)
    
    if list == lastList:
        exit()
    
    for i in range(num-1, 0, -1):
        if list[i - 1] < list[i]:
            for j in range(num - 1, 0, -1):
                if list[i - 1] < list[j]:
                    list[i - 1], list[j] = list[j], list[i - 1]
                    list = list[:i] + sorted(list[i:])
                    permuFun(list)

permuFun(data)

설명

for문은 백준 10972 참고
https://velog.io/@seha01130/백준python-10972번-다음-순열

itertools 이용해서도 해결 가능
https://velog.io/@seha01130/python-itertools-순열-조합-라이브러리

0개의 댓글