c# 백준 2869 달팽이는 올라가고 싶다.
문제
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
입력과 출력
입력 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
출력 첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.
풀이 과정
이 문제는 시간 제한이 빡빡하기 때문에 반복문을 통해 처리하면 안되고 한 번에 계산할 수 있는 규칙을 찾아야 한다.
달팽이는 하루에 낮에 A 만큼 올라가고 밤에 B 만큼 미끄러지니 (A - B)
만큼 올라간다고 볼 수 있다.
하지만 달팽이가 낮에 나무막대를 다 오른다면 밤에 미끄러질 일은 없다. 그렇기 떄문에 실질적으로 달팽이가 올라가야할 높이는
(V - B)
라고 볼 수 있다. (마지막 날은 미끄러지지 않으니까)
그러므로 (V - B)
의 높이를 하루에(A - B)
만큼 올라서 몇번 걸리는지 구하면 된다. 즉, 두 개를 나눠서 답을 구할 수 있다.
전체 코드
class Program
{
static void Main(string[] args)
{
string[] s = Console.ReadLine().Split(' ');
int A = int.Parse(s[0]); // 올라가는 높이
int B = int.Parse(s[1]); // 밤에 미끄러지는 높이
int V = int.Parse(s[2]); // 우물 높이
int realV = V - B; // 실질적으로 올라가야할 높이
int days = realV / (A - B); // 며칠이 걸리는지
if (realV % (A - B) != 0) // 나머지가 있을 경우 하루 더 올라가야 함
days++;
Console.Write(days);
}
}
댓글남기기