멋쟁이v의 개발일지

[백준 2869번] 달팽이는 올라가고 싶다(파이썬) 본문

0년차/알고리즘(기본 수학)

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

멋쟁이v 2022. 12. 1. 09:00
728x90
320x100
문제
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.

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

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

 

입력
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
출력
첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.

 

예제 입력
입력 1
2 1 5

입력 2
5 1 6

입력 3
100 99 1000000000
예제 출력
출력 1
4

출력 2
2

출력 3
999999901
 

 

풀이
이 문제의 계산식을 구해보면
A : 낮에 올라가는 거리
B : 밤에 내려가는 거리
V : 나무 높이

V = (A - B) * day  -> day = V / (A - B)
일반적인 문제의 계산식은 이렇게 되지만
여기서 조건은 나무 정상에 도달했을 땐 내려오는 일이 없다고 하네요.
이것 때문에 저도 머리를 한참 썼습니다.

계산식을 다시 해보면
V <= (A * day) - {B * (day - 1)}
내려오는 거리를 날짜에서 하루를 빼줘야 됩니다.
날짜를 정답으로 출력하기 위해 계산식을 정리해보면
-> V <= day(A - B) + B
-> V - B <= day(A - B)
-> day >= (V - B) / (A - B)
최종 계산식은 이렇게 나오고 날짜는 소수점이 없기 때문에 x.1 x.2 x.3 ... x.9 는 전부 올림으로 처리합니다.

최종 계산식 : day = (V - B) / (A - B)

코드를 순서대로 작성한다면
1. 3개의 정수를 입력
2. 계산식을 변수에 저장
3. 실수형태의 변수를 math함수를 사용하여 올림 출력

※ import math 는 math.ceil() 과 math.floor() 가 있습니다.
    - ceil은 천장을 의미하여 올림을 뜻하며, floor은 바닥을 의미하여 내림을 뜻합니다.


작성 코드
import math

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

day = (V - B) / (A - B) # 계산식

print(math.ceil(day)) # math 함수를 사용해서 올림하여 출력
728x90
320x100
Comments