알고리즘 풀이/백준

[백준] 2869번 달팽이는 올라가고 싶다 (Python3)

p-code 2024. 3. 25. 13:32
출처

https://www.acmicpc.net/problem/2869

 

2869번: 달팽이는 올라가고 싶다

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

www.acmicpc.net

 

문제

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

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

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

 

코드
import sys
import math

def solution(a, b, v):

    days = math.ceil((v - b) / (a - b))

    return days

#main
newLine = sys.stdin.readline

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

result = solution(A, B, V)

print(result)

 

코드 설명

(a - b) + (a - b) + ... + (a - b) + a ≥ v  의 식을 만족하는 (a - b)의 최소 개수를 구해야한다. (a도 포함 해야한다. 반나절 걸린거도 하루로 쳐야하기 때문이다.)

 

(a - b) * days + b ≥ v

 

days ≥ (v - b) / (a - b)

 

days는 자연수이므로

days = ceiling((v - b) / (a - b))

 

알고리즘 분류

- 수학

      

테스트 케이스

▶ 입력

123 34 199999999

 

▶ 출력: 2247191