honey_pot

[Python] 줄 서는 방법 본문

문제 풀이

[Python] 줄 서는 방법

_tera_ 2022. 9. 21. 16:37

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


항상 찾아보고 감탄만 하는 규칙 찾는 문제다

다들 초등학교 때 문제 푸는 방법 찾기 단원 고수였나봄

 

k 처리하는 부분에서 k = k % factorial(n-1) 로 처리하면 시간 초과가 나지 않지만

k %= factorial(n-1)로 처리하면 효율성 테스트에서 시간 초과가 나온다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from math import factorial
 
def solution(n, k):
    num = [i for i in range(1,n+1)]
    answer = []
    k = k-1
    
    while num:
        # k / (n-1)! 을 했을 때의 몫이 맨 첫번째 자리
        idx = k // factorial(n-1)
        answer.append(num[idx])
        del num[idx]
        # k 처리
        k %= factorial(n-1)
        n -= 1
    return answer
cs

 

-----

1
2
3
4
5
6
7
8
9
10
11
12
13
from math import factorial
 
def solution(n, k):
    answer = []
    num = [i for i in range(1,n+1)]
    k-=1
    while num:
        idx = k // factorial(n-1)
        answer.append(num[idx])
        del num[idx]
        k = k % factorial(n-1)
        n-=1
    return answer
cs

 

 

 

찾아보니 += 연산은 in-place 속성이라 이미 있는 변수의 재선언 없이 제자리에서 작동한다 

a = a+b 같은 경우에는 a+b 연산을 수행한 후에 a에 그 값을 대입하여 새로 선언하는 것이기 때문에

k의 숫자가 큰 경우에 속도 차이가 생기나?

 

https://stackoverflow.com/questions/41446833/what-is-the-difference-between-i-i-1-and-i-1-in-a-for-loop

b += 1 updates b in-place, while a = a + 1 computes a + 1 and then assigns the name a to the result (now a does not refer to a row of A anymore).

 

 

  • n은 20이하의 자연수 입니다.
  • k는 n! 이하의 자연수 입니다.

문제 조건에 따라 가장 숫자가 클때의 경우를 구해봤는데 더 미궁으로 빠졌다

최대

'문제 풀이' 카테고리의 다른 글

[Python] 하노이의 탑  (0) 2022.09.22
[Python] 가장 큰 정사각형 찾기  (1) 2022.09.21
[Python] 쿼드압축 후 개수 세기  (0) 2022.09.21
[Python] 2개 이하로 다른 비트  (1) 2022.09.21
[Python] 양궁대회  (1) 2022.09.20
Comments