1. 개요
2. 풀이
def solution(n, k):
N = 20
# 팩토리얼 갯수로 그룹화된다.
# n이 3일때, FACT[2] = 첫번째 위치의 글자의 그룹숫자 = 2
FACT, FACT[1], FACT[2] = [0]*(N+1), 1, 2
# 사전순으로 나열하기 위해 오름차순으로 만든다.
NUMS = [i for i in range(1,n+1)]
def fact():
for i in range(3, n+1):
FACT[i] = i*FACT[i-1]
def answer():
_k = k
ans = []
for blockIdx in range(n-1, 0, -1):
divider = FACT[blockIdx]
mock, remain = _k//divider-1, _k%divider
# 만약 remain이 있다면 더 큰그룹으로 나눠야 한다.
if remain:
mock += 1
ans.append(NUMS[mock])
NUMS.remove(NUMS[mock])
_k = remain
ans.append(NUMS[0])
return ans
fact()
return answer()
Leave a comment