S E P H ' S

[Python] 줄 서는 방법 본문

Algorithm/Programmers

[Python] 줄 서는 방법

yoseph0310 2021. 9. 7. 12:45
 

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

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

programmers.co.kr

풀이

1. 제한사항에서 n은 20이하의 자연수라고 되어있다. 시간 복잡도가 n! 인 permutations를 사용하면 제한시간 초과로 풀지 못하는 테스트 케이스가 발생한다.

2. 수학적 응용과 문제의 규칙을 이용해서 풀어야함.

3. 문제에서 처럼 k를 5라고 했을때, k 이전에 있는 배열의 개수는 4. 이 중에 1로 시작하는 경우 2개, 2로 시작하는 경우 2개이다.

즉, n = 3일때, 하나를 골랐을 때 나머지를 고를 수 있는 경우의 수와 같다. 이는 2! 개이며 (n-1)개이다. (순열 경우의 수 참조)

4. 이 k를 fact(n-1)로 나눈 몫을 인덱스로, 나머지를 다음 순서로 둔다.

 

from math import factorial

def sol(n,k):
	answer = []
    people = [i for i in range(1, n+1)]
    
    while != 0:
    	fact = factorial(n-1)
        answer.append(people.pop((k-1) // fact))
        n -= 1
        k %= fact
   
    return answer

'Algorithm > Programmers' 카테고리의 다른 글

[Python] 스티커 모으기(2)  (0) 2021.09.07
[Python] 야근 지수  (0) 2021.09.07
[Python] 최고의 집합  (0) 2021.09.05
[Python] 하노이의 탑  (0) 2021.09.04
[Python] N-Queen  (0) 2021.09.04