본문 바로가기

알고리즘/백준

[python 파이썬] 백준 2869번: 달팽이는 올라가고 싶다

반응형

https://www.acmicpc.net/problem/2869

 

2869번: 달팽이는 올라가고 싶다

문제 땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다. 달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다. 달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000) 출력 첫째 줄에 달팽

www.acmicpc.net

 

 

처음 짠 코드:

 

A, B, V = map(int, input().split())

day=1
while V>0:
    V-=A
    if V<=0:
        break
    V+=B
    day+=1

print(day)

 

하지만 문제에서 시간제한이 역시나 시간 초과가 나왔다. 반복문 같은 것들을 쓰지 않고 바로 출력해야 시간 안에 가능할 것 같았다.

 

수정한 코드:

 

import math
A, B, V = map(int, input().split())
print(math.ceil((V-A)/(A-B))+1)

 

먼저 달팽이는 하루에 A-B만큼 올라가고, 달팽이가 낮에 정상에 올라가면 더 이상 미끄러지지 않으므로 먼저 정상에서 A만큼 빼서 (V-A)/(A-B)를 해주고, 먼저 뺏던 하루를 더해줬다. 이때, 나눈 몫이 2.x, 3.x 등과 같이 정수로 나누어 떨어지지 않는 경우에는 0.x일도 하루로 쳐야 하기 때문에 올림을 해줬다.

반응형