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

첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

www.acmicpc.net

 

✏️ 내가 작성한 코드 - 1 (시간초과)

# 시간초과 뜸
import sys
a,b,v = map(int,sys.stdin.readline().strip().split())
day = 1
m = 0

while(m != v):
    m += a
    if(m == v):
        break
    m -= b
    day += 1

print(day)

 

✏️ 내가 작성한 코드 - 2

import sys
import math
a,b,v = map(int,sys.stdin.readline().strip().split())

if (v-b)%(a-b) == 0:
    print((v-b)//(a-b))
else:
    print(math.ceil((v-b)/(a-b)))

 

✏️ 참고

* 반복문 사용 시 시간초과 발생.

* 달팽이는 정상에 올라간 후에는 미끄러지지 않는다는 것이 중요하다.

따라서 정상에 도달하는 시점은 이며, (x-1)일동안 (a-b)만큼 오르고 마지막날 낮에 a만큼 올라가서 정상에 도달한다.

이걸 식으로 작성하면 (x-1)(a-b) + a >= v 이며 x >= (v-b)(a-b) 이다.

날짜는 정수여야하므로 math.ceil을 활용하여 올림처리를 한다.

 

+ Recent posts