백준 2869:달팽이는올라가고싶다(*)

Jimin·2023년 2월 20일
0

알고리즘

목록 보기
55/71

문제

땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.

달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.

달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.


입력

첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)


출력

첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.


분석

  1. 그냥 반복문으로 풀면 시간 초과가 뜬다.
  2. 수학식을 찾아야한다.
    → 걸리는 시간 = (V-A)/(A-B)
    이 때 (V-A)%(A-B)==0이면 하루만 더 A만큼 더 가면 되고,
    나누어 떨어지지 않는다면 하루 더 가고, 하루만큼 A더 가면 된다.
  3. 목표점이 V가 아니라 V-A라는 점에 주목해야한다.
    → 밤이 되기전에 달팽이가 V에 먼저 도착할 수 있기 때문이다.
    ⇒ 따라서 나중에 A만큼 더 갈 하루를 더 해주도록 한다.

코드

#include <iostream>

using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    
    int A, B, V;
    cin >> A >> B >> V; // A올라가고 B내려가고, 높이는 V

    int day;
    day = (V-A)/(A-B) + 1;
    if((V-A)%(A-B) != 0) {
       day++;
    }

    cout << day;

    return 0;
}
profile
https://github.com/Dingadung

0개의 댓글