백준 - 2869번 달팽이는 올라가고 싶다(수학)

Kiwoong Park·2023년 6월 12일
0

문제

문제
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.

접근방식
하루만에 올라가는 경우를 예외로 두고, 나머지 2일 이상의 n일이 걸리는 경우는 아래와 같은 수식으로 정의하여 코드로 구현하였다.

A1+(AB)(n1)Vn(VA)/(AB)+1A*1 + (A-B)*(n-1) \geq V \\ \rarr n \geq (V-A)/(A-B) + 1 \\

C++풀이

#include <bits/stdc++.h>
using namespace std;

int main()
{
    double A,B,V,day;
    cin >>A>>B>>V;
    if ((V-A)<0) day=1;
    else {
        day = ceil((V-A)/(A-B))+1;
    }  
    cout<<int(day);
}

숏코딩 분석하기

#import<iostream>
int a,b,v;
main(){
	std::cin>>a>>b>>v;
    std::cout<<(v-b-1)/(a-b)+1;
}

문제에서 A > B 이고 정수이므로 실제로 A의 최소값은 B+1 이 된다.
이 논리를 가지고 위의 수식을 재정리하면

A1+(AB)(n1)V(B+1)+(AB)(n1)Vn(VB1)/(AB)A*1 + (A-B)*(n-1) \geq V \\ (B+1) + (A-B)*(n-1) \geq V \\ \rarr n \geq (V-B-1)/(A-B) \\

위와 같이 실수형으로 애써 받을 필요 없이 n은 (V-B-1)/(A-B)이 이상의 숫자이므로 숏코드와 같이 풀 수 있다!👏

profile
You matter, never give up

0개의 댓글