using System;
namespace Baekjoon
{
internal class Program
{
static void Main(string[] args)
{
//그냥 콘솔창 예쁘게 꾸미는 코드(심심해서 넣음)
Console.BackgroundColor = ConsoleColor.DarkCyan;
//이 문제의 핵심은 정상에 올라간 후에는 미끄러지지 않는다는 점이다
//즉, 낮에 A미터를 올라 나무 막대 길이인 V미터인 길이와 이때까지 오른 길이가 같거나 커진다면
//밤이 되어 미끄러질 필요가 없다
//즉, 정상 도착은 항상 낮에 이루어진다
//문제의 핵심이 하나 더 있었다, 시간 제한이 있다는 점이다
//이때문에 반복문을 쓰지말고 공식을 이용하여 시간을 줄여야 할 것 같다
//입력값 받아옴
string[] input = Console.ReadLine().Split();
//각각 등반 거리 값, 미끌린 거리 값, 정상의 높이임
int up = int.Parse(input[0]);
int down = int.Parse(input[1]);
int finish = int.Parse(input[2]);
//정상까지 가는데 걸리는 일수
int day = 0;
//이때까지 올라간 거리(현재는 쓰지 않는 변수)
//int totalDistance = 0;
//반복문을 이용한 방법이지만 수가 커질수록 반복횟수도 많아져서 그만큼 느려진다
/*while (totalDistance < finish)
{
day++;
totalDistance = totalDistance + up;
if (totalDistance >= finish)
{
break;
}
totalDistance = totalDistance - down;
}*/
//일단 day변수에 값을 저장해 준다 공식은 다음과 같다
//(정상 거리 - 등반 거리) / (등반 거리 - 미끌린 거리)
//공식을 설명하기 전에 낮과 밤을 합친 하루 총 이동거리는 (등반 거리 - 미끌린 거리)라는 것을 알아야 한다
//즉, 공식은 (정상 거리 - 등반 거리) / (하루 총 이동거리) 라고 보면 된다
//(정상 거리 - 등반 거리)를 해준 이유는 (하루 총 이동거리)만으로 완등하는데 며칠이 걸리는지 알아야 하기때문이다
//(정상 거리 - 등반 거리)는 '정상 도달 일수를 하루 빼놓는 것'과 같다(이 부분이 중요하니 잘 기억해두자)
//만약 잘못된 공식인 (정상 거리 / 하루 총 이동거리)를 한다면 실제 소요되는 일수보다
//잘못된 공식으로 구한 일수가 훨씬 많이 나올 것이다 ex)입력값이 100 99 1000000000일때
//하지만 올바른 방법인 (정상 거리 - 등반 거리)에서 (하루 총 이동거리)를 나눈다면 실제 소요 일수보다 1~2 적은 일수가 나온다
day = (finish - up) / (up - down);
//위에서 계산한 day는 실제 소요 일수보다 1~2가 적은 일수다
//그러므로 day에 1 또는 2를 더하여야 한다
//(정상 거리 - 등반 거리) % (하루 총 이동거리)가 0이 아니라면 하루 더 가야한다는 뜻이다
if ((finish - up) % (up - down) != 0)
{
//등반 일수 = (현재 등반일수 + 하루 더) + 아까 빼놓은 등반 일수 1
day = (day + 1) + 1;
}
//(정상 거리 - 등반 거리) % (하루 총 이동거리)가 0이라면 일수가 딱맞게 떨어진다는 뜻이므로
//아까 빼뒀던 일수 1을 더해주면 된다
else if ((finish - up) % (up - down) == 0)
{
//등반 일수 = 현재 등반 일수 + 아까 빼놓은 등반 일수 1
day = day + 1;
}
//결과 출력
Console.WriteLine(day);
}
}
}
푸는데 약 한시간 정도 걸린 것 같다
공식도 이렇게 하면 되겠다 싶어서 해보다가 우연히 맞은거라 좀 아쉽다
'백준' 카테고리의 다른 글
백준 2501번 c# (0) | 2024.01.30 |
---|---|
백준 5086번 c# (0) | 2024.01.30 |
백준 1193번 c# (0) | 2024.01.27 |
백준 2292번 c# (0) | 2024.01.27 |
백준 2903번 c# (0) | 2024.01.26 |