문제 링크
풀이
- 처음엔 while문을 사용해서 정상에 도달할 때까지 반복해주었더니 시간초과가 발생하였다.
# 시간초과
import sys
input = sys.stdin.readline
a, b ,v = map(int,input().split())
w = 0
cnt = 0
while True:
w += a
cnt += 1
if w >= v:
break
else:
w -= b
print(cnt)
-a는 낮에 올라갈 수 있는 높이고 b는 밤에 미끄러지는 높이라고 하면
나무의 높이 v = (a-b)* n + a 이다.
a만큼 올라가고 b만큼 떨어지는 것을 n일동안 반복한 후 a만큼 올라가서 정상에 도착하면 미끄러지지 않기 때문이다.
따라서 올라가는 데 걸리는 시간은 n+1일이다.
n + 1 = (v-a) / (a-b)
이 때 정확하게 나무의 높이만큼 올라가는 것이 아니기 때문에 나누어 떨어지지 않을 수 있는데,
소수점일 경우 하루가 더 걸린 것과 같으므로 올림을 사용한다.
import math
a, b ,v = map(int,input().split())
print(math.ceil((v-a)/(a-b))+1)
'개발 > algorithm' 카테고리의 다른 글
[백준 18111번] 마인크래프트 - python (0) | 2022.02.13 |
---|---|
[백준 1018번] 체스판 다시 칠하기 - python (0) | 2022.02.13 |
[백준 2292번] 벌집 -python (0) | 2022.02.13 |
[백준 1107번] 리모컨 - python (0) | 2022.02.13 |
[백준 1012번] 유기농 배추 - python (0) | 2022.02.13 |