[7/5] 2869 (달팽이는 올라가고 싶다)

3475 단어 백준코테백준

브론즈1 문제

처음에 짠 코드

a, b, v = map(int, input().split())

h = 0
day = 1

while True:
    h = h + a
    if (h >= v):
        print(day)
        break
    
    h = h - b
    day += 1

로직

  • while문을 돌려서, h(높이)가 v 이상이 될 때까지 반복한다.

  • 낮에 정상에 오르면 끝이 나므로, 더하기와 빼기 사이에 if문을 배치했다.

  • 하지만 이렇게 할 경우, 숫자 매우 클 때 시간초과가 발생해서 통과되지 않았다.


틀리고 고친 코드

import math

a, b, v = map(int, input().split())

n = (v - a) / (a - b)
n = math.ceil(n)
n = n + 1
print(n)

로직

  • 공식 : (a - b)n + a >= v
  • 공식을 변형해서 넣었다.
  • n이 분수인 경우, h가 v 이상이라는 뜻이다. 따라서 올림을 해줬다.
  • (1 + n) 일에 정상에 도착하므로, 1을 더해줬다.

배운 것

  • math.ceil(n) : 올림

좋은 웹페이지 즐겨찾기