Solution 1 (실패)
const [A, B, V] = require('fs')
.readFileSync('../input.txt')
.toString()
.trim()
.split(' ')
.map(Number);
let day = 1; // (1)
let sum = 0; // (2)
while (true) {
sum += A; // (3)
if (sum >= V) {
// (4)
break;
}
sum -= B;
5;
day++;
}
console.log(day);
- 정상에 도달하기까지의 일수, 기본 하루를 초기값으로 설정
- 달팽이가 올라간 총 거리
- 낮에 올라간 거리를 더해준다.
- 밤이 오기 전, 낮에 정상(V)까지 도달할 수 있기 때문에 if 문을 미끄러진 거리(B)를 빼기 전에 작성해야한다. 정상(V)보다 올라간 총 거리가 크거나 같다면 반복문을 빠져나간다.
- 다음으로 미끄러진 거리를 총 거리에서 빼준다.
- 밤이 지나면 하루가 끝나기 때문에 day 를 증가시킨다.
이번 문제는 꽤 쉬워서 간단하게 풀었다고 생각했지만 결과는
시간초과
좀 더 계산 적으로 접근해 보기로 했다.
Solution 2 (성공)
/**
* 올라가야하는 총 거리 = 정상까지의 거리 - 미끄러진 거리
* 하루에 올라가는 거리 = 낮에 올라간 거리 - 밤에 미끄러진 거리
* 총 거리 / 하루 = 소요 일
*
* 소요 일 = (V - B) / (A - B)
*/
const [A, B, V] = require('fs')
.readFileSync('../input.txt')
.toString()
.trim()
.split(' ')
.map(Number);
console.log(Math.ceil((V - B) / (A - B)));
달팽이가 **올라가야하는 총 거리(총 거리)**와 하루에 올라갈 수 있는 거리(하루 거리)를 구해 총 거리에서 하루를 나누면 총 소요되는 일 수를 계산할 수 있을 것이다.
연산식으로 작성하면 이와 같다.
총 거리 = 정상까지의 거리 - 미끄러지는 거리
하루 거리 = 낮에 올라간 거리 - 밤에 미끄러진 거리소요 일 = 소요 거리 / 하루 거리
소요 일 = (V - B) / (A - B)
결과는
통과!