[python] 백준 2869번 / 달팽이는 올라가고 싶다 / import math

1. 문제

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

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


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


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



2. Key point

🤔 식 세우기

🐌는 A미터 오르고 B미터 미끄러지고..를 x일 동안 무한 반복하다가
어느 날 A미터를 올랐는데 V미터에 도달하게 된다.

이를 식으로 세우면,

(A-B)*x + A >= V

이때, x를 남기고, 식을 정리하여 주면,

x >= (V-A) / (A-B)

❗ 단, 이때 출력해야 하는 값은 x가 아니라 x+1이 되어야 한다.
x일 오르고 마지막 x+1일째 되는 날, V미터에 도달하는 것이기 때문!

🧵 math 모듈 활용하기

math 모듈 중 실수를 입력하면 올림하여 정수 값을 반환하는 함수 ceil()이 있다.

위의 식에서 우리가 구해야 하는 값은 x+1일이기 때문에 ceil()함수를 활용해주자.

import math

math.ceil(3.14) 	# 4
math.ceil(3)		# 3 (정수는 그대로 반환)
math.ceil(-3.14)	# -3


#c.f. math.floor()는 내림한 값을 반환한다.
math.floor(3.14)	# 3



3. 나의 풀이

😵 첫번째 풀이 (math 모듈 활용 안한 경우)

A, B, V = map(int, input().split())
k=(V-A)%(A-B)
if k==0:
    print(int((V-A)//(A-B))+1)
else :
    print(int((V-A)//(A-B))+2)

✔ 이또한 정답이지만 math 모듈을 활용하면 조건을 나누지 않아도 됨 😘



😎 두번째 풀이 (math 모듈 활용한 경우)

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


좋은 웹페이지 즐겨찾기