본문 바로가기
알고리즘 문제 풀이

백준 2869번 : 달팽이는 올라가고 싶다 (Python)

by 로널드 피셔 2022. 10. 11.

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

import math

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

낮에 2미터(=a) 올라가고 밤에 1미터(=b) 미끄러지는 달팽이가 5미터(=v)의 막대를 올라가는 경우를 가정해보자.
마지막 낮 이전에 3미터(v - a = x) 이상 올라간 상태라면, 낮 동안 2미터를 올라가 정상에 도달할 수 있다.
하루의 낮과 밤에는 1미터(a - b)를 올라가기 때문에
3일(x/(a - b)) + 1일 = 총 4일이면 정상에 도착한다.

다음으로 a = 5, b = 2, v = 10 인 경우를 가정해보자.
마지막 낮 이전에 5미터 이상 올라가면 낮 동안 정상에 도달할 수 있고,
5미터에 도달하는데는 최소 2일 걸리기 때문에
총 3일이면 정상에 도착한다.
따라서 마지막 낮 이전에 올라가야하는 높이(x = v - a)를 하루 낮과 밤 동안 올라가는 높이(a - b)로 나눈 값을
올림한 후 1을 더해주면 최종적인 결과가 나온다.

math.ceil()

올림을 계산하는 함수를 사용하기 위해서는 먼저 import math 명령어로 math 모듈을 가져와야 한다.
내림은 math.floor()
반올림은 모듈을 가져올 필요 없이 round() 함수를 사용하면 된다.

댓글