Baekjoon-2869 (나도 정상에 올라가고 싶다..)

Coding_John :)·2021년 8월 16일
0

Baekjoon

목록 보기
4/7
post-thumbnail

문제

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

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

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

풀이

#include <stdio.h>

int main() {
    int v,a,b;
    int day = 1;
    int m = 0;
    scanf("%d %d %d",&a,&b,&v);
    
    while(1){
        m += a; // 낮에 올라가는 값
        if (m >= v){
            break; 
        }
        m -= b; // 밤에 미끄러지는 값
        day++;
    }
    printf("%d",day);
    return 0;
}

처음에는 이렇게 풀었다. VS에서는 잘만 돌아가는데 백준에서는 자꾸 시간초과라고 한다.
역시 이렇게 쉬운 문제면 브론즈 1단계로 내겠나 싶다... 그래서 수정했다.

#include <stdio.h>

int main() {
    int v,a,b;
    scanf("%d %d %d",&a,&b,&v);
    int day = (v-a) / (a-b) + 1;
    
    if ((v-a) % (a-b) == 0){
        printf("%d",day); // n일 올라가고 남는 길이 없이 딱 떨어지는 경우.
    }
    else {
        printf("%d",day+1); // n일 올라가고 남는 길이를 낮에 다 못 올라가는 경우.
    }
    return 0;
}

조금 설명해보자면
밤에는 미끄러지지만 낮에는 올라간다. 만약에 5미터 올라갈건데 4미터 올라가고 1미터씩 미끄러진다고 하면 하루에 3미터라고 생각하면 된다 그러면 2미터가 남고 남은 2미터는 하루밤 잘 필요없이 낮에 다 올라간다. 즉 올라가려는 길이(5)에다가 낮에 올라갈 수 있는 길이(4)를 빼고 올라가는 길이(4)와 미끄러지는 길이(1)의 차를 나눠주고 거기에 하루를 더해주면 된다.
(5-4) / (4-1) == 1 / 3 ==> 0(day) + 1(day)
적다보니 설명이 너무 복잡하고 길어진 거 같다...

0개의 댓글