728x90
https://www.acmicpc.net/problem/2869
조건이 좋아서 반복문 만으로 풀 수가 있었으면 좋았겠지만
애초에 반복문 쓰지 말고 수학적 계산으로 풀라고 논 문제라 반복문 돌리면 시간초과뜸
내가 푼 방법은
1. a와 v 가 같으면 1 출력
2. v에 도착하기 위해 최소 v-a에는 올라가고 내려가며 도착해야 v에 한번의 추가적인 이동으로 도착할 수 있기 때문에
(v - a) // (a - b)를 구해서 카운트 세줌
cnt = 몫 >> 이동횟수임
3. 만약 카운트가 0이라면 v-a가 a-b보다 작다는 뜻 이때는 한번 올라간 이동을 수동으로 cnt+=1해줘야한다. 왜냐하면 이동횟수 한번이 고려되지 않았기 때문.
4. 혹시나 소수점 버리는 연산의 결과로 고려되지 않은 수가 있을때에도 수동으로 cnt+=1을 해준다.
ex) 16 2 33 의 경우
v - a = 17
a - b = 14 임.
최소 17까지 올라가야되는데 올라갔다 내려왔다의 연산으로는 14의 배수밖에 탐색하지 못 함.
17//14 = 1 인데 최소 17이상 올라가야 되기 때문에
1이 아니라 2번 올라가야됨. 그래서 +=1 해주는것
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import sys
input = sys.stdin.readline
a, b, v = map(int, input().split())
v = v - a
cnt = v // (a - b)
if v == 0:
cnt = 0
elif cnt == 0:
cnt += 1
elif v > cnt * (a - b):
cnt += 1
print(cnt + 1)
|
cs |
728x90
'PS > 백준' 카테고리의 다른 글
[백준 1037번] 약수 (파이썬/python) (0) | 2021.06.14 |
---|---|
[백준 1436번] 영화감독 숌 (파이썬/python) (0) | 2021.06.14 |
[백준 4948번 ] 베르트랑 공준 (파이썬/python) (0) | 2021.06.14 |
[백준 1011번 ] Fly me to the Alpha Centauri (파이썬/python) (0) | 2021.06.14 |
[백준 2839번 ] 설탕 배달 (파이썬/python) (0) | 2021.06.14 |