출처
백준 온라인 저지
문제
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다.
또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
풀이
단순히 반복문을 돌려 해결할 수도 있지만 시간 복잡도 때문에 시간 초과가 나게 됩니다.
그에 간단한 계산식을 만들어 보면, 정상에 도착하면 미끄러지지 않고 그 즉시 끝나게 되니 정상(높이)에서 밤에 미끄러지는 수를 빼주면 됩니다. 즉 (높이 - 밤에 미끄러지는 수) 값까지 만 올라가면 됩니다.
그리고 아침에는 위로 이동을 하지만 밤에는 미끄러지니 결국 하루에 이동하는 값은 (아침에 이동하는 수 - 밤에 미끄러지는 수)가 될 것입니다.
결과 값이 딱 떨어지지 않는 수가 나오면 하루가 더 필요하다는 뜻이므로 Math.ceil 메서드를 사용해 올림을 하여 하루를 더해줍니다.
코드
let input = require('fs').readFileSync('/dev/stdin').toString().split(' ');
const A = input[0]; // 아침에 이동하는 수
const B = input[1]; // 밤에 미끄러지는 수
const V = input[2]; // 높이
// (높이 - 밤에 미끄러지는 수) / (아침에 이동하는 수 - 밤에 미끄러지는 수)
console.log(Math.ceil((V - B) / (A - B)));