less than 1 minute read

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