[백준] #2869 달팽이는 올라가고 싶다(python)

수영·2022년 7월 15일

백준

목록 보기
5/117
post-thumbnail

📌문제

땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.

달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.

달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

출력

첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.

💡Idea

어릴 적 수학 문제에서 정말 많이 봤던 문제입니다. 이 문제를 대학생이 된 지금 볼 줄이야...!😮 그 문제를 풀었던 계산식을 찾기만 하면 됩니다.

달팽이는 하루에 a - b 만큼을 올라갑니다.
하지만, 마지막 날에는 정상에 도달하기 때문에 미끄러지지 않아 a 만큼 올라간다고 할 수 있습니다.

따라서, 올라가야 하는 높이 v에서 b를 뺀 뒤, a - b로 나누어주면 몇 일만에 정상에 도달할 수 있는지 알 수 있습니다.

👇말로 잘 이해가 가지 않는다면 아래 수식으로 확인해보면 됩니다!
달팽이가 정상까지 올라가는 데에 n일이 걸린다고 할 때 n은 다음과 같습니다.

v=(ab)×(n1)+av = (a - b) \times (n - 1) + a
vb=(ab)×(n1)+(ab)v - b = (a - b) \times (n - 1) + (a - b)
vb=(ab)×(n)v - b = (a - b) \times (n)
n=n = (vb)(ab)(v - b) \over (a - b)

💻코드

import sys
import math

a, b, v = map(int, sys.stdin.readline().split())

print(math.ceil((v - b) / (a - b)))

📝코드 설명

계산 식을 잘 찾았다면 코드는 굉장히 단순합니다. 계산식을 그대로 적어주기만 하면 됩니다.
math.ceil을 통해 올림을 해준 이유는, 정답이 3.5일이라면 4일이 걸리는 것이나 마찬가지이기 때문입니다.

변수

  • a : 달팽이가 하루에 올라갈 수 있는 미터
  • b : 달팽이가 밤 사이 미끄러지는 미터
  • v : 올라가야 하는 나무의 미터
profile
하고 싶은 건 그냥 죽도록 합니다

0개의 댓글