- Date : 2021.02.21(일)
- Time : 25분
- n명의 사람이 일렬로 줄을 서고 있습니다. n명의 사람들에게는 각각 1번부터 n번까지 번호가 매겨져 있습니다. n명이 사람을 줄을 서는 방법은 여러가지 방법이 있습니다. 사람의 수 n과, 자연수 k가 주어질 때, 사람을 나열 하는 방법을 사전 순으로 나열 했을 때, k번째 방법을 return하는 solution 함수를 완성해주세요.
- 제한사항
- n은 20이하의 자연수 입니다.
- k는 n! 이하의 자연수 입니다.
answer = []
exList = [i for i in range(1, n + 1)]
# 먼저 제일 첫번째 방법을 exList에 넣어둔다.
while (n != 0):
temp = factorial(n) // n
# 방법의 총 수를 구하기 위해 팩토리얼을 구현해서 넣어주었다. math를 import 할 수도 있지만 직접 구현해보았다.
index = k // temp
# 인덱스를 추출한다
k = k % temp
if k == 0:
answer.append(exList.pop(index - 1))
# 나머지가 0일때는 -1을 진행해준다.
else:
answer.append(exList.pop(index))
n -= 1
return answer
: 모든 조합을 구한 후 n번째를 찾는 것이 아니라 바로 n번째를 찾는게 효율적으로 포인트였다.