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 이라면 굉장히 많은 시간이 소요된다.
- 시간 초과가 나지 않으려면 반복문을 통해 계산하는 것이 아닌 다른 방법으로 계산해야한다.
'Python > online judge' 카테고리의 다른 글
백준 [9506.약수들의 합] | Python (0) | 2024.01.04 |
---|---|
백준 [2903.중앙 이동 알고리즘] | Python (0) | 2023.12.28 |
백준 [5597.과제 안 내신 분..?] | Python (0) | 2023.12.01 |
백준 [10811.바구니뒤집기] | Python (0) | 2023.11.30 |
백준 [10810.공 넣기] | Python (0) | 2023.11.29 |