honey_pot
[Python] 줄 서는 방법 본문
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의 숫자가 큰 경우에 속도 차이가 생기나?
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