[Python] 백준 11332 시간초과

2022. 1. 10. 15:06공부/Python

문제

유빈이는 코딩을 하다가 시간 초과가 났다. 그래서 시간 복잡도를 계산하기로 했다.

채점 시스템은 1초에 100000000(10^8)가지 동작을 할 수 있다.

여러분들은 유빈이를 도와 시간초과가 나는지 확인하는 프로그램을 작성하라.


입력

입력의 첫 번째 줄에는 테스트 케이스들의 수 C가 주어진다.

그 다음 C개의 줄에는 시간 복잡도를 나타내는 문자열 S, 각 테스트 케이스마다 입력의 최대 범위 N, 테스트 케이스의 수를 나타내는 T랑 제한시간(초 단위) 를 나타내는 L이 주어진다. (1 <= C <= 100, 1 <= N <= 1000000, 1 <= T, L <= 10, N, T, L은 정수)

시간 복잡도는 다음과 같은 5개 중 하나로 주어진다.

  • O (N)
  • O (N^2)
  • O (N^3)
  • O (2^N)
  • O (N!)

출력

각 테스트 케이스들에 대하여 시간 초과가 나면 "TLE!", 시간 초과가 나지 않으면 "May Pass." 를 출력한다.


풀이

import sys  
import math

input = sys.stdin.readline

for _ in range(int(input())):  
S, N, T, L = input().split()


N = int(N)
T = int(T)
L = int(L)

million = 100000000

if S == "O(N)":
    if (million * L) >= (N * T):
        print("May Pass.")
    else:
        print("TLE!")
elif S == "O(N^2)":
    if (million * L) >= ((N ** 2) * T):
        print("May Pass.")
    else:
        print("TLE!")
elif S == "O(N^3)":
    if (million * L) >= ((N ** 3) * T):
        print("May Pass.")
    else:
        print("TLE!")
elif S == "O(2^N)":
    if (million * L) >= ((2 ** N) * T):
        print("May Pass.")
    else:
        print("TLE!")
elif S == "O(N!)":
    if (million * L) >= math.factorial(N) * T:
        print("May Pass.")
    else:
        print("TLE!")