단계별 문제에 기본 수학 1에 올라와 있던 문제입니다. 당연히, 올라갔다 내려갔다를 반복하는 알고리즘을 짜면 안되고, 도착했을 시점에 며칠이 흘렀는지 계산하는 수학 식을 적절히 세워야합니다.
🤔 고민된 점
특별히 고민이 될만한 점...이라기 보다는, 달팽이가 마지막에 목표 높이에 올라가는 시점에 며칠이 지났는지를 측정한다는 점을 주의해야 한다는 정도였습니다. 그러니까, 목표 높이에 닿으면 다시 미끄러질일이 없다는 점을 주의해야해요.
✔️ 힌트/해결법
먼저, 달팽이는 하루에 A미터 올라가고 B미터 내려가는 행동을 반복하기 때문에 하루가 지나면 최종적으로 A-B 미터를 움직인다는 것을 쉽게 알 수 있습니다. 앞서 말했듯이, 중요한 점은 A미터를 올라갔을 때 달팽이가 미끄러지지 않고 도착한 상태임을 명시해야 한다는 것인데요.
이 부분은 간단히 도착 높이 V보다 A 작은 높이에 도달하는 날을 최종 도착 하루 전으로 명시해주면 된다는 것입니다. 달팽이가 V-A 높이까지 하루에 A-B만큼 움직인다면, V-A높이에 도달할 때까지 (V-A) / (A-B) 일 만큼의 시간이 필요하고, 다음 A의 높이를 올라가는 것 까지해서 최종적으로 하루 더 필요하다고 볼 수 있겠네요.
(V-A) / (A-B) 를 계산하게 되면 소수점이 남는 경우가 있습니다. 예를 들면 계산 결과로 3.2일이 나왔다하면 3일보다는 더 걸린다고 볼 수 있겠네요. 그러니 계산결과를 math.ceil 통해 올림 처리 해주셔야 합니다. V-A의 높이에 닿으려면 최소 4일의 시간이 걸린다는 것이니까요! (4일 후에는 V-A보다 높이 올라가긴 하겠지만요.) 그리고 그 다음 날 A만큼의 높이를 올라가야 하니 1을 더해주시면 최종 답이 나옵니다.
즉, 최종 식은 아래와 같이 되겠네요!

🗝 코드
import math
A, B, V = map(int, input().split())
result = math.ceil((V - A) / (A - B) + 1)
print(result)
'Python > 백준 알고리즘' 카테고리의 다른 글
[백준 알고리즘: python 3] #2805 - 나무자르기(이분 탐색 스터디) (0) | 2020.05.01 |
---|---|
[백준 알고리즘: python 3] #1027 - 고층 건물 (1) | 2020.04.18 |
[백준 알고리즘: python 3] #1026 - 보물 (0) | 2020.04.14 |
[백준 알고리즘: python 3] #1629 - 곱셈(분할 정복 스터디) (0) | 2020.04.13 |
[백준 알고리즘: python 3] #10951 - A + B - 4 (0) | 2020.04.06 |
단계별 문제에 기본 수학 1에 올라와 있던 문제입니다. 당연히, 올라갔다 내려갔다를 반복하는 알고리즘을 짜면 안되고, 도착했을 시점에 며칠이 흘렀는지 계산하는 수학 식을 적절히 세워야합니다.
🤔 고민된 점
특별히 고민이 될만한 점...이라기 보다는, 달팽이가 마지막에 목표 높이에 올라가는 시점에 며칠이 지났는지를 측정한다는 점을 주의해야 한다는 정도였습니다. 그러니까, 목표 높이에 닿으면 다시 미끄러질일이 없다는 점을 주의해야해요.
✔️ 힌트/해결법
먼저, 달팽이는 하루에 A미터 올라가고 B미터 내려가는 행동을 반복하기 때문에 하루가 지나면 최종적으로 A-B 미터를 움직인다는 것을 쉽게 알 수 있습니다. 앞서 말했듯이, 중요한 점은 A미터를 올라갔을 때 달팽이가 미끄러지지 않고 도착한 상태임을 명시해야 한다는 것인데요.
이 부분은 간단히 도착 높이 V보다 A 작은 높이에 도달하는 날을 최종 도착 하루 전으로 명시해주면 된다는 것입니다. 달팽이가 V-A 높이까지 하루에 A-B만큼 움직인다면, V-A높이에 도달할 때까지 (V-A) / (A-B) 일 만큼의 시간이 필요하고, 다음 A의 높이를 올라가는 것 까지해서 최종적으로 하루 더 필요하다고 볼 수 있겠네요.
(V-A) / (A-B) 를 계산하게 되면 소수점이 남는 경우가 있습니다. 예를 들면 계산 결과로 3.2일이 나왔다하면 3일보다는 더 걸린다고 볼 수 있겠네요. 그러니 계산결과를 math.ceil 통해 올림 처리 해주셔야 합니다. V-A의 높이에 닿으려면 최소 4일의 시간이 걸린다는 것이니까요! (4일 후에는 V-A보다 높이 올라가긴 하겠지만요.) 그리고 그 다음 날 A만큼의 높이를 올라가야 하니 1을 더해주시면 최종 답이 나옵니다.
즉, 최종 식은 아래와 같이 되겠네요!

🗝 코드
import math
A, B, V = map(int, input().split())
result = math.ceil((V - A) / (A - B) + 1)
print(result)
'Python > 백준 알고리즘' 카테고리의 다른 글
[백준 알고리즘: python 3] #2805 - 나무자르기(이분 탐색 스터디) (0) | 2020.05.01 |
---|---|
[백준 알고리즘: python 3] #1027 - 고층 건물 (1) | 2020.04.18 |
[백준 알고리즘: python 3] #1026 - 보물 (0) | 2020.04.14 |
[백준 알고리즘: python 3] #1629 - 곱셈(분할 정복 스터디) (0) | 2020.04.13 |
[백준 알고리즘: python 3] #10951 - A + B - 4 (0) | 2020.04.06 |