기본 수학1 4단계
2869번. 달팽이는 올라가고 싶다
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.
2 1 5
4
5 1 6
2
100 99 1000000000
999999901
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().split(" ");
const up = input[0];
const slide = input[1];
const height = input[2];
// height를 (up - slide)로 나누면 되지않나 생각할 수도 있다.
// 이 방법의 문제는 하루에 무조건 up과 slide가 모두 발생함을 가정한다는 것이다.
// 따라서 up 후 정상에 도달하면 slide가 발생하지 않는다는 것을 고려해야한다.
// 그 때의 식을 표현하면 아래와 같다.
// height - slide = (up - slide) * count
// 이게 가능한 것은 slide가 up보다 작기 때문이다. 만약 컸다면 계속 내려가기만 할테니..
const count = (height - slide) / (up - slide);
console.log(Math.ceil(count));
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().split(" ");
const up = input[0];
const slide = input[1];
let height = input[2];
let count = 0;
while(true){
// height에서 올라간 거리만큼 뺄셈
height -= up;
// 올라간 횟수 증가
count++;
// height에서 up을 뺀 결과가 0 이하라면 정상에 도달했으므로 break
if(height <= 0){
break;
}
// height가 음수가 아니라면 이 문장을 실행하게 됨
// 즉, 정상에 도달한게 아니므로 밤에 미끄러져 내려옴
height += slide;
}
console.log(count);
처음 작성했던 코드는 동작에는 문제가 없었지만 문제에서 요구되는 시간을 초과해서 통과하지 못했다.(시간 초과 제목에 있는 코드)
최대한 반복문을 줄이면서 논리를 유지하도록 수정했다.