동캄의 코딩도장

프로그래머스 level3 [줄 서는 방법] 파이썬 본문

코테/프로그래머스

프로그래머스 level3 [줄 서는 방법] 파이썬

동 캄 2022. 4. 11. 11:55

https://programmers.co.kr/learn/courses/30/lessons/12936

 

코딩테스트 연습 - 줄 서는 방법

n명의 사람이 일렬로 줄을 서고 있습니다. n명의 사람들에게는 각각 1번부터 n번까지 번호가 매겨져 있습니다. n명이 사람을 줄을 서는 방법은 여러가지 방법이 있습니다. 예를 들어서 3명의 사람

programmers.co.kr

# 프로그래머스 줄 서는 방법
import math

def solution(n, k):
    answer = []
    k -= 1
    lst = [i for i in range(1, n+1)]
    while n > 1:
        p = math.perm(n-1)
        answer.append(lst.pop(int(k//p)))
        k = k % p
        n -= 1
    for val in lst:
        answer.append(val)
    return answer

위 문제는 재귀적으로 풀 수 있다.

n!개중에 k번째 = 맨 앞의 수(lst에서 k//(n-1)! 번째 수) + (n-1)!개중에 k%(n-1)!번째 를 더한 경우와 같다.