본문 바로가기
python-algorithm

백준 11332 시간초과

by 무적김두칠 2021. 12. 28.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import math
import sys
def solution(oper,n,t,l):
    n,t,l=int(n),int(t),int(l)
    oneSecond=(10**8)*l
    if oper=='O(N)':
        bigO=n*t
    elif oper=='O(2^N)':
        bigO=pow(2,n)*t
    elif oper == 'O(N!)':
        bigO=math.factorial(n)*t
    elif oper == 'O(N^3)':
        bigO=pow(n,3)*t
    elif oper == 'O(N^2)':
        bigO = pow(n, 2* t
    if oneSecond<bigO:print("TLE!")
    else:print("May Pass.")
n=int(input())
for _ in range(n):
    oper,n,t,l=sys.stdin.readline().split()
    solution(oper,n,t,l)
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import math
import sys
def myFactorial(n,t,l):
    start=t
    for i in range(1,n+1):
        start*=i
        if start>(10**8)*l : return False
    return True
def solution(oper,n,t,l):
    n,t,l=int(n),int(t),int(l)
    if oper=='O(N)':
        bigO=n*t
    elif oper=='O(2^N)':
        bigO=(2**n)*t
    elif oper == 'O(N^3)':
        bigO=(n**3)*t
    elif oper == 'O(N^2)':
        bigO = (n**2* t
    elif oper == 'O(N!)':
        return myFactorial(n,t,l)
    if (10**8)*l<bigO:return False
    elsereturn True
n=int(input())
for _ in range(n):
    oper,n,t,l=sys.stdin.readline().split()
    if solution(oper,n,t,l) : print("May Pass.")
    else:print("TLE!")
cs

1차시도: python 3 - math.factorial() 써서 시간초과
2차시도: pypy3 - math.factorial() 써도 간신히 통과
3차시도: python 3 math.factorial()안쓰고 팩토리얼 최종 값을 구하는게 아니라 중간에 타임리밑트 보다 넘으면 False 를 리턴하게 구현

 

반응형

'python-algorithm' 카테고리의 다른 글

백준 17952 과제는 끝나지 않아!  (0) 2021.12.30
백준 11899 괄호 끼워넣기  (0) 2021.12.29
백준 2729 이진수 덧셈  (0) 2021.12.28
백준 2870 수학숙제  (0) 2021.12.28
백준 1822 차집합  (0) 2021.12.27

댓글