[C언어] 백준 2869 : 달팽이는 올라가고 싶다.

mainsain·2022년 3월 14일
0

백준

목록 보기
5/64

내가 처음에 푼 코드

#include <stdio.h>

int main()
{
    int sum = 0, count = 1;
    int a, b, c;
    scanf("%d %d %d", &a, &b, &c);
    while(1)
    {
        sum = sum + a;
        if (sum >= c)
        {
            printf("%d", count);
            break;
        }
        else
        sum = sum - b;
        count++;
    }
}

간단하게 말하자면 sum에 a를 차곡차곡 쌓고, c가 넘으면 count한 걸 출력
아니라면 b값을 빼서 반복.

그런데 문제에서 시간제한이 0.15초로 시간초과로 틀리게 되었다.
while문을 쓰면 안되겠구나 생각을 했다.

근데 생각을 해봐도 답이 떠오르지 않아 검색했다.

다른 사람 코드

#include <stdio.h>

int main()
{
    int count;
    int a, b, c;
    scanf("%d %d %d", &a, &b, &c);
    count = (c - b - 1) / (a - b) + 1;
    printf("%d", count);
}

달팽이는 하루에 a - b씩 c만큼 올라가야 한다.

하지만 마지막에 올라갔을 경우에, 미끄러지는 경우를 고려를 안해야 하기 때문에 총 c - b만큼을 올라가야 한다.

따라서 (c - b) / (a - b)를 해주어야 한다.
여기에서 몫이 나누어 떨어지지 않을 경우 한 번 더 가야 하므로 +1을 해주어야 한다.

따로 케이스를 지정하지 않고 분자에 -1을 한 뒤 몫을 +1을 처리해주어서 답을 도출한다.

profile
새로운 자극을 주세요.

0개의 댓글

관련 채용 정보