문제

땅 위에 달팽이가 있다. 이 달팽이는 높이가 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

 

 

 

내가 실패한 답들 

A,B,V = map(int, input().split())

now = 0
day = 0

while True:
    now += A
    day += 1
    if now >= V:
        break
    else:
        now -= B

print(day)

 

A,B,V = map(int, input().split())
tot = A-B

now = 0
day = 0

while True:
    now += tot
    day += 1
    if V == now + A or V <= now + A:
        day += 1
        break
        
print(day)

 

출력은 되는데 모두 시간초과로 인해 실패하였다.

 

그래서 알고리즘 분류가 수학으로 돼있어서

x를 다 올라가는 횟수라하고 x-1을 내려가는 횟수라고 해서

식을 세우니 아래와 같은 결과가 나왔다.

 

Ax - B(x - 1) = V

Ax - Bx + B = V

(A - B)x = V - B

X = (V - B)/(A - B)

 

그래서 이걸 바탕으로 코드를 만들었다.

import math

A, B, V = map(int, input().split())
day = (V-B) / (A-B)
print(math.ceil(day))

 

ceil을 한 이유는 올림을 해줘야 우리가 원하는 답이 나오기 때문이다.

예를 들어 day의 값이 5.6이 나오면 5가 답이 아닌 6이 답이 나와야 하기 때문이다. 

 

앞으로 실행시간도 신경써서 코드를 만들어야겠다는 생각을 하게 되는 문제였다. 

'알고리즘' 카테고리의 다른 글

백준 파이썬 - 9506  (1) 2024.02.02
백준 파이썬 - 2292  (0) 2024.01.30
백준 파이썬 - 2903  (1) 2024.01.30
백준 파이썬 - 2720  (1) 2024.01.29
백준 파이썬 - 2745  (1) 2024.01.29

+ Recent posts