문제
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다.
또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
출력
첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.
코드
import math #올림함수 사용
A, B, V = map(int, input().split())
print(math.ceil((V-A)/(A-B)+1))
시간 초과의 벽을 넘기 위해 단순화시켜야 하는 문제였습니다.
문제에서 의도한 것은 마지막에 달팽이가 올라갈 수 있는 거리를 모두 사용한다는 것입니다.
2 1 5 입력을 예로 든다면
1일은 2-1 = 1, 2일은 1 + (2-1) = 2, 3일은 2 + (2-1) = 3이 되지만
4일 차는 3 + 2 = 5로 밤에 미끄러지지 않고 정상에 도달할 수 있다는 것입니다.
해당 과정을 바탕으로 식을 구상해 보았습니다.
마지막 날에는 달팽이가 갈 수 있는 최대만큼 갈 수 있다고 한다면,
그 이전은 총 거리(5)에서 이동거리(2)를 뺀 값(3)에 도달하기 위한 날만 계산하면 되는 것입니다.
즉, 3에 도달하기 위해 소비된 3일이라는 값만 알아내면 나머지는 1일에 끝낼 수 있기 때문에
+1만 하면 된다는 것입니다.
정확히 떨어지지 않는 값이 있을 수 있기 때문에 처리가 필요합니다.
3 1 8 입력을 가정으로 한다면,
8까지 도달하기 위해서는 2, 4, 6의 거리에 도달하는 3일의 과정과,
1일에 8까지 도달하는 과정을 합한 4일이 요구됩니다.
"(V-A)/(A-B)+1"식에 대입하면 (V-A)/(A-B) = (5/2 = 2.5)의 소수점이 나오면서
정확한 일수 계산이 어려워집니다.
소수점이 생기는 이유는 마지막 날에 달팽이 이동거리의 최대치를 쓰지 않고서도
정상에 올라갈 수 있다는 의미와 같습니다.
그렇기 때문에 저 소수점의 시간도 1일이라고 산정합니다.
무조건 올림을 적용하는 것입니다.
그래서 math 모듈을 import 하여 올림 함수인 ceil() 함수를 적용하였습니다.
-끝-
'작업 > Problem Solving' 카테고리의 다른 글
백준 10250(ACM 호텔) 파이썬(python) 해결 (0) | 2020.09.10 |
---|---|
백준 2775(부녀회장이 될테야) 파이썬(python) 해결 (0) | 2020.09.10 |
백준 2292(벌집) 파이썬(python) 해결 (0) | 2020.08.20 |
백준 1193(분수찾기) 파이썬(python) 해결 (0) | 2020.08.20 |
백준 2839(설탕 배달) 파이썬(python) 해결 (0) | 2020.08.18 |