[python] 백준 : 2869 달팽이는 올라가고 싶다

728x90

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

 

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

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

www.acmicpc.net

알고리즘 분류 : 수학

 


코드

import math

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

코드 풀이

반복문으로 문제를 접근하면 원하는 값은 출력될 것이나 시간 초과로 오답처리가 된다.

따라서 그냥 공식을 하나 만들어서 바로 출력하는 방법으로 해결해야 했다.

 

이동한 시간(일 수) = 도달해야 할 거리 / 하루 동안 이동한 거리이다.

 

낮에 A만큼 올라갔다가 밤에 B만큼 다시 내려오게 되므로 하루 동안 이동한 거리는 A-B라고 할 수 있다.

그러나 도달해야 할 거리를 V로 잡으면 문제가 생긴다.

어떤 값을 주던간에 달팽이가 V에 도달하는 것은 항상 낮이 된다.

달팽이의 이동거리에서 A만큼 덜 갔다는 것은 도착까지 걸리는 일 수에 하루를 빼준 것과 같으므로

이동한 시간을 V-A로 잡는다면 (V-A) / (A-B) + 1 을 하면 이동한 시간에 대한 값을 얻어낼 수 있다.

 

자연수 1을 하루의 시간으로 잡았으므로 (V-A) / (A-B) + 1의 값에 소수점이 붙어있다면 하루가 더 초과된 시간이므로 ceil함수를 통해 올림 처리를 해주었다. 

728x90