문제에서 요구하는 것은 최소한의 공간이동 장치 작동 횟수이므로 결국 한 번 이동할 때 최대로 이동을 해야만 장치 작동 횟수의 최소값을 구할 수 있다. 따라서 최대한 이동할 거리를 늘리다가 점차 다시줄여 1광년으로 도착 지점에 도달한다면 해당 횟수가 최소한의 횟수 임을 알 수 있다.
위 표를 참고하면 x부터 y까지의 거리는 이므로 값이 를 넘기지 않는 n의 최대값을 찾는다.
거리가 으로 딱 나누어떨어지지 않으면 해당 값은 n을 넘기지 않는 선에서 최대 크기 n으로 쪼개서 사이에 넣어줄 수가 있다.
남은 광년을 n보다 큰 광년으로 쪼개지 않는 이유는?
n보다 큰 광년이 삽입되기 위해서는 최소한 n이 두 번 나와야 하는데 n이 한 번 나오기 때문에 n보다 큰 값으로 쪼갤 수 없다.
그럼 n+1까지 한 다음에 n+1로 남은 광년을 쪼개는게 더 적은 횟수 아닌가요?
아까 위에서 말했듯이 거리()보다 작거나 같은 을 만족시키는 n의 최대값을 찾기 때문에 만약 n+1까지 증가시키게 되면 거리를 넘어가게 된다.
import math
import sys
input = sys.stdin.readline
ans = []
T = int(input())
for _ in range(T):
x, y = map(int, input().split())
n = 1
distance = y - x
while n**2 <= distance:
n += 1
n -= 1
print((n * 2 - 1) + math.ceil((distance - (n**2)) / n))