https://www.acmicpc.net/problem/1011
# 최고속도를 찍는 지점을 찾는다. 이 경우, 세가지 경우가 발생한다.
# case 1) 최고속도를 찍은 지점까지의 거리와 남은 거리(a, 알파)가 동일한 경우
# case 2) 최고 속도를 찍은 지점까지의 거리 < 남은 거리(a, 알파)의 경우
# case 2-1) 0 < a <= k인 경우, k속도 만큼 한번 더 간다.
# case 2-2) k < a <= 2k인 경우, k속도 만큼 두번 더 간다.
# 최고속도 k를 찍는 지점을 찾는 방법은 다음과 같다.
# 최고속도 k 지점 까지 거리의 합 = k(k+1)/2
# 최고속도 k 지점 이후 남은 거리의 합 = k(k-1)/2
# 이 두개의 합을 구하면 k제곱이 나온다.
t = int(input())
for _ in range(t):
x, y = map(int, input().split())
distance = y - x
k = 0
while True:
k += 1
if distance - k * k <= 0: # 최고 속도 지점을 찾는다.
break
if distance - k * k == 0: # case 1
print(k * 2 - 1)
else: # case 2
k = k - 1
if distance - k * k <= k: #case 2-1
print(k * 2)
else: # case 2-2
print(k * 2 + 1)
'Algorithm > 알고리즘 문제풀이' 카테고리의 다른 글
백준 2581번 파이썬 - 소수 (0) | 2021.08.12 |
---|---|
백준 1978번 파이썬 - 소수 찾기 (0) | 2021.08.12 |
백준 10757번, 파이썬 - 큰 수 A + B (0) | 2021.08.11 |
백준 2839번, 파이썬 - 설탕배달 (0) | 2021.08.11 |
오늘의 알고리즘(백준 11004) (0) | 2021.07.23 |
댓글