[python] 백준 2869번 달팽이는 올라가고 싶다. ( 시간초과 )

도리·2025년 2월 28일

읏. 또 시간초과다.
a,b가 작은데 day가 매우 커질경우 시간이 매우 오래걸린다...

문제

내 코드

#높이 v 
# 낮 +a 밤 -b 
a,b,v = map(int, input().split())
day = 0 #답 
count = 0 #v까지 되어야함
con = True

while (con):
  count += a
  count -= b
  if count == v:
    con = False
  else:
    day+=1


print(day)
  • 시간복잡도 : O(n)
  • 날짜수에 비례하는 시간복잡도를 가짐.

정답코드

A, B, V = map(int, input().split()); # 낮 올 // 밤 내 // 총 길이

if V < A : 
    print(1);
else:
    if (V-A) % (A-B) == 0 :
        print((V-A) // (A-B) +1)
    else :
        print((V-A) // (A-B) +2)
  • 시간복잡도 : O(1)
  • 단순 산술 연산시 시간복잡도가 확연히 차이가 난다.ㅠ

cf. 조건과 시간복잡도

  • 시간제한이 0.25초고, v 가 최대 1000000000 (10^9)
  • 내 코드의 시간복잡도 = O(10^9) = 500초~1000초.
  • 10^8번 계산시 약 1초? 걸린다고 생각하면 되나
  • O(nlogn)이고 n=10^8 이면 약 30초 정도 걸린다고 생각하면 된다.
profile
인공지능응용학과 졸업예정..

0개의 댓글