[Python][프로그래머스][Level3] 줄 서는 방법

[Python][프로그래머스][Level3] 줄 서는 방법

코드

def solution(n, k):
    answer=[]
    num=list(range(1,n+1))
    
    while num:
        cp=1
        for i in range(2,n):
            cp*=i
        ck= k//cp if k%cp>0 else k//cp-1
        answer.append(num[ck])
        num=num[:ck]+num[ck+1:]
        k-=cp*ck
        n-=1
    return answer

일단 n개의 수를 일렬로 세웠을 때, 가능한 경우의 수는 n! 이다.

가장 첫번째 오는 수를 기준으로 (n-1)! 씩 n개의 경우의 수 인 것이다.

따라서 k 번째 방법을 n-1로 나눠주면 첫번째 오는 값을 알 수 있다.

이 과정을 반복하면 k번째 수를 알 수 있다.

Discussion and feedback