달팽이는 올라가고 싶다
import sys
def main():
input = sys.stdin.readline
up, down, height = map(int, input().split())
days = 1 + -((height - up) // -(up - down))
print(days)
main()
이 문제는 달팽이의 높이를 매일 시뮬레이션하여 풀 수는 없습니다. 최악의 경우 $V = 1\,000\,000\,000$, $A=2$, $B=1$이면 걸리는 날이 너무 길어집니다.
문제의 일반해를 찾아봅시다. 달팽이가 나무 막대를 모두 올라갔을 때는 항상 낮입니다. 따라서 첫날 낮에 $A$미터를 올라가 $V - A$미터가 남은 상태에서, 밤과 다음 날 낮에 $A - B$미터씩 올라가는 과정을 반복한다고 생각할 수 있습니다. 즉, 달팽이가 모두 올라간 날이 $D$일 후라면 다음이 성립합니다: $$ D = 1 + \left\lceil \frac{V - A}{A - B} \right\rceil. $$ 문제에 주어진 조건에 의해 $\frac{V - A}{A - B} \ge 0$입니다. 위 식은 첫날 낮에 나무 막대를 모두 올라간 경우($V = A$)에도 성립함을 확인할 수 있습니다.
문제에서 정상에 올라간 후에는 미끄러지지 않는다고 했으므로, 다음 식은 잘못되었습니다: $$ D \overset{?}{=} \left\lfloor \frac{V}{A - B} \right\rfloor. $$
몫과 나머지 2
값 | Python 코드 |
---|---|
$\left\lfloor x / y \right\rfloor$ | x // y |
$\left\lceil x / y \right\rceil$ | -(x // -y) |
댓글