백준 2869번
최종 제출 코드
import math
a, b, v = map(int, input().split())
A = v/(a-b)
B = a/(a-b)
print(math.ceil(A-B)+1)
- 시간 제한이 있는 것을 보면 반복문으로 풀면 안되는 문제
- 정상에서 미끄러지지 않는다는 가정이 없다면
(a - b)*x = v로 풀면 된다.
이 경우의 값이 변수A이다.
A처럼 계산하면 실제로 구해야 하는 횟수보다 더 많이 구해진다.
이때 얼마나 더 많이 구해지는지는 a와 b의 차이가 a에서 차지하는 비율에 달렸다. 즉, (a-b)의 값이 작을 수록 A에는 더 많은 값이 더해졌을 것이다.
이 경우의 값이 변수 B이다.
- 따라서,
A에서 B를 빼주어 그 값을 올림 처리한다.
이렇게 되면 정상에 도착하기 직전 상태가 된다.
+1을 해준다.
처음 제출한 코드
import math
a, b, v = map(int, input().split())
A = math.ceil(v/(a-b))
B = math.floor(a/(a-b))
print(A-B+1)
- 횟수를 5.5번, 1.25번과 같은 식으로 세는게 맞지 않다고 생각해 두 값을 연산하기 전에 각각에 올림, 내림 처리를 해줬다.
B 값에 대해 왜 내림 처리를 해줬는지는 모르겠다..
- 이 계산법이 맞지 않는 테스트케이스의 특징이 궁금하다..