반응형
출처
Baekjoon Online Judge
Baekjoon Online Judge 프로그래밍 문제를 풀고 온라인으로 채점받을 수 있는 곳입니다.
www.acmicpc.net
문제
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
풀이
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split(' ');
let [morning, night, stick] = input.map(Number);
let count = 0;
while (stick > 0) {
stick = stick - morning;
count++;
if (stick <= 0) {
break;
}
stick = stick + night;
}
console.log(count);
일단 반복문으로 접근해 보았는데, 시간 초과가 떴습니다. 시간을 줄이려면 수학 공식화해서 풀어야 합니다.
접근방법
일단은 단순하게 생각하면 높이 / 하루에 가는 거리
를 해주면 됩니다. 그런데 마지막 날 미끄러지는 거리는 안 가도 되므로 높이 - 미끄러지는 거리만큼만 가면 됩니다. 따라서 높이 - 미끄러진 거리 / 하루에 가는 거리 하면 되는데 소수점이 나온다면 날짜이므로 올림을 해줍니다.
코드
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split(' ');
let [morning, night, stick] = input.map(Number);
console.log(Math.ceil((stick - night) / (morning - night)));
반응형
댓글