[Baekjoon] 2869 - 달팽이는 올라가고 싶다 (Python)
문제
Input
A
: 달팽이가 하루 중 낮에 올라가는 거리
B
: 달팽이가 밤에 자면서 미끄러지는 거리
V
: 올라가야 할 나무막대 높이 (정상 높이)
Output
며칠이 걸려 정상에 도착하는가?
풀이
우선 문제를 정리하고 난 후에 바로 코드로 옮겨보았다.
while문으로 풀면 되겠네? 하고 간단하게 생각했는데
1
2
3
4
5
6
7
8
9
10
11
12
13
import sys
a, b, v = map(int, sys.stdin.readline().strip().split())
day = 0 # 경과 날짜
m = a - b # 하루에 올라가는 거리
dis = 0
while dis > v:
dis += m
day += 1
print(day)
시간제한이 0.25초 이기 때문에 반복문을 사용하면 시간초과에 걸리게 된다.
우리가 출력해야하는 것은 며칠이 걸렸는지 날짜를 구하는 것이다.
1차원적으로 생각했을 때, 경과날짜에 하루에 올라간 거리를 곱하면 정상에 도달할 수 있다.
하지만 달팽이는 낮에 올라가고(A) 밤에는 미끄러지므로(B) 마지막날 낮에 정상에 도착하기 때문에 낮에 올라간 거리(A)를 더해줘야 비로소 정상에 도달할 수 있는 것이다.
그리고 우리가 출력해야 하는 day를 구하기 위해 이항을 해주면 day = (v - a) / (a - b)
로 마지막 날짜를 제외한 경과 날짜를 구할 수 있다.
마지막 날짜를 더해주면
day = (v - a) / (a - b) + 1
예제입력2(a:5 b:1 v:6)처럼 결과값이 1.xxx 로 실수가 나오게 되는 경우가 있는데,
경과일은 2일이니까 int형으로 바꾸어 1로 만들어주고 출력 전에 1을 한 번 더 더해주면 된다.
Code
1
2
3
4
5
6
7
import sys
a, b, v = map(int, sys.stdin.readline().strip().split())
day = (v - a) / (a - b) + 1
print(int(day) if day == int(day) else int(day) + 1)
Leave a comment