Python/online judge
백준 [2869.달팽이는 올라가고 싶다] | Python
구름솜:D
2023. 12. 13. 09:46
728x90
✏️ 문제
https://www.acmicpc.net/problem/2869
2869번: 달팽이는 올라가고 싶다
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
www.acmicpc.net
✏️ 풀이방법
1. 나무막대에 도달하는 날을 x라고하면, 총 올라가는 횟수는 x번, 내려오는 횟수는 x-1번이다.
2. Ax - B(x-1) = V를 x에 대한 식으로 정리하면 x = (V-B)/(A-B)이다.
3. x가 정수이면 x일에 나무를 다 올라간것이지만, x가 정수가 아니라면 +1을 한다.
📌 코드
A, B, V = map(int, input().split())
x = (V-B)/(A-B)
if x == int(x):
print(int(x))
else:
print(int(x) + 1)
📌 결과
2 1 5 #입력
4 #출력
5 1 6 #입력
2 #출력
100 99 1000000000 #입력
999999901 #출력
🤔 시행착오.1
a,b,v = map(int,input().split())
step, day_step = 0,0
cnt_day = 0
for i in range(v):
day_step = step + a
if day_step >= v:
cnt_day = i
break
else:
step = day_step - b
print(cnt_day + 1)
2 1 5 #입력
4 #출력
- 올라가는 step를 나무의 높이와 같을 때까지 하나씩 카운트하도록 for문을 사용했다.
- 입력량이 많으면 시간초과 발생한다.
- 예를 들어 낮에 2미터를 올라가고, 밤동안 1미터를 미끄러기는데 정상높이가 1,000,000,000 이라면 굉장히 많은 시간이 소요된다.
- 시간 초과가 나지 않으려면 반복문을 통해 계산하는 것이 아닌 다른 방법으로 계산해야한다.