[백준] 2869번.달팽이는 올라가고 싶다 | 브론즈1 | Python

싱숭생숭어·2024년 4월 3일
0

백준

목록 보기
9/32

문제

시간 제한메모리 제한제출정답맞힌 사람정답 비율
0.25 초 (추가 시간 없음)128 MB249746793806304631.244%

문제 설명

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

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

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

입력

첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

출력

첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.

예제 입력 1

2 1 5

예제 출력 1

4

예제 입력 2

5 1 6

예제 출력 2

2

예제 입력 3

100 99 1000000000

예제 출력 3

999999901


내 풀이

이 문제는 두가지 방법으로 풀 수 있다.

1) while문과 if문 사용
2) math 라이브러리 사용

내 풀이 1

a와 남은 거리에 따라 2가지 경우의 수가 나온다.

1) a>=남은 거리: count += 1, break
2) a<=남은 거리: count += 1, 남은거리 -= (a-b)

이를 아래에서 구현해보자

a, b, v = map(int, input().split())

day = 0
if v<=a: print(1)
while v>0:
    if v/a>1:
        day += 1
        v -= (a-b)
    else:
        day += 1
        v -= a
print(day)

하지만 이 방법은 예제 1과 2에서만 가능하고, 예제 3같이 반복의 횟수가 증가하면 시간내에 풀리지 않는다.


내 풀이 2

결국 math 라이브러리를 사용하기로 한다.

점화식: A + X(A-B) >= v

이를 양변에 동일한 값을 넣어줘 변형한다.

(X+1)(A-B) >= V-B

X+1 >= (V-B)/(A-B)

import math

a, b, v = map(int, input().split())
print(math.ceil((v-b)/(a-b)))

역시 라이브러리가 최고야

profile
공부합시당

0개의 댓글