알고리즘
백준 2869)달팽이는 올라가고 싶다
무루뭉
2021. 1. 8. 00:22
https://www.acmicpc.net/problem/2869
2869번: 달팽이는 올라가고 싶다
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
www.acmicpc.net
실패한 코드(시간 초과)
a, b, v = map(int, input().split(' '))
day = 1
day_one = a - b
while True:
if day_one >= v:
print(day)
break
else:
day += 1
if day_one * (day - 1) + a >= v:
print(day)
break
성공한 코드
import sys
import math
a, b, v = map(int, sys.stdin.readline().split(' '))
day_one = a - b
day = (v-a) / day_one + 1
print(math.ceil(day))
시간 초과에 안 걸리기 위해서 입력 방식도 바꾸고, math.ceil을 사용해서 계산 방식을 바꿨다.
v - a는 막대 길이에서 마지막 날 올라간 거리를 뺀 것이고, v - a를 하루동안 하루동안 올라가는 거리인 day_one으로 나눴다. 그 결과에서 1을 더해주어야 정상에 올라간 day를 구할 수 있다. 그리고 나누기 과정에서 ceil 함수를 통해 올림 처리 해주었다. (4.4일은 4일이 아니라 5일이기 때문이다.)