https://school.programmers.co.kr/learn/courses/30/lessons/12936
from itertools import permutations
def solution(n, k):
answer = []
_list = [i for i in range(1,n+1)]
ways = list(permutations(_list, len(_list)))
return list(ways[k-1])
주어진 코드는 itertools의 permutations 함수를 사용하여 n개의 숫자로 이루어진 순열을 모두 생성한 다음, 그 중에서 k번째 순열을 반환하려고 한다. 그러나 이 코드는 순열의 개수가 매우 커질 때(특히 n이 큰 경우) 성능 문제가 발생할 수 있다.
이러한 성능 문제를 해결하려면 다른 방식으로 접근해야 한다. 순열을 구하는 대신, 팩토리얼 개념을 통해 k번째 순열을 직접 계산하는 방법을 사용할 수 있다.
def solution(n, k):
answer = []
_list = [i for i in range(1, n + 1)]
k -= 1 # k를 0-based 인덱스로 변환
factorial = 1
for i in range(1, n):
factorial *= i
for i in range(n - 1, -1, -1):
index = k // factorial
answer.append(_list.pop(index))
k %= factorial
if i > 0:
factorial //= i
return answer