[BaekJoon]2869번: 달팽이는 올라가고 싶다
❓문제
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
✏️입력
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
📜출력
첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.
💻코드
/*
[백준 2869] 달팽이는 올라가고싶다
22-08-03 / c++
< 문제 >
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다.
또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
< 알고리즘 >
숫자 입력받고, V, D, N
낮에 올라가는 거리 D * 낮시간, 밤에 미끄러지는 거리 N*밤시간
낮에 이동한 거리를 총 이동거리에 더한 뒤, 총 이동거리가 V이상이 되면 멈춤
그렇지 않으면 밤에 미끄러진 거리를 빼주어야한다.
반복문을 돌리는데 이때 i가 걸린 일 수.
*/
#include<iostream>
using namespace std;
int main(void) {
int V;
int D, N;
int total = 0;
int day;
cin >> D >> N >> V;
for (int i = 1; total < V; i++) {
total += D;
if (total >= V) {
day = i;
break;
}
total -= N;
}
cout << day;
return 0;
}
- 결과는 제대로 나오지만 시간초과로 실패했다.
/*
[백준 2869] 달팽이는 올라가고싶다
22-08-03 / c++
< 알고리즘 >
숫자 입력받고, v, d, n.
하루에 움직이는 거리 d-n,
첫째날 낮은 무조건 이동이 진행되므로 v-d를 해준다.
"미끄러지는 저녁~다음날 낮"으로 생각하여 v-d를 하루에 움직이는 거리로 나눠준다.
나머지가 0이면 딱 맞게 올라간 것이므로 첫째날만 더해준다. (+1)
나머지가 0이 아니면 그 다음날 낮에 정상에 오르는 것이므로 첫째날과 합해 이틀을 더해준다(+2)
*/
#include<iostream>
using namespace std;
int main(void) {
int V, D, N;
int day;
cin >> D >> N >> V;
V -= D;
int distanceOfDay = D - N; //하루 이동 거리
if (V % distanceOfDay != 0)
{
day = V / distanceOfDay + 2;
}
else {
day = V / distanceOfDay + 1;
}
cout << day;
return 0;
}