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을 활용하여 올림처리를 한다.
'백준' 카테고리의 다른 글
[백준][python] 4659 비밀번호 발음하기 문제 (1) | 2023.10.11 |
---|---|
[백준][python] 1924 2007년 문제 (0) | 2023.10.09 |
[백준][python] 2164 카드2 문제 (0) | 2023.08.11 |
[백준][python] 1181 단어 정렬 문제 (0) | 2023.08.01 |
[백준][python] 10817 세 수 문제 (0) | 2023.07.25 |