문제

[BaekJoon] 2869 달팽이는 올라가고 싶다


Input

A : 달팽이가 하루 중 낮에 올라가는 거리

B : 달팽이가 밤에 자면서 미끄러지는 거리

V : 올라가야 할 나무막대 높이 (정상 높이)

Output

며칠이 걸려 정상에 도착하는가?

풀이

IMG_0201

우선 문제를 정리하고 난 후에 바로 코드로 옮겨보았다.

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)를 더해줘야 비로소 정상에 도달할 수 있는 것이다.

IMG_0202

그리고 우리가 출력해야 하는 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