[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)
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)
Author And Source
이 문제에 관하여([python] 백준 2869번 / 달팽이는 올라가고 싶다 / import math), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@likemika/python-백준-2869번-달팽이는-올라가고-싶다-import-math저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)