문제 1011

Fly me to the Alpha Centauri

입력 : 입력의 첫 줄에는 테스트케이스의 개수 T가 주어진다. 각각의 테스트 케이스에 대해 현재 위치 x 와 목표 위치 y 가 정수로 주어지며, x는 항상 y보다 작은 값을 갖는다. (0 ≤ x < y < 231)
출력 : 각 테스트 케이스에 대해 x지점으로부터 y지점까지 정확히 도달하는데 필요한 최소한의 공간이동 장치 작동 횟수를 출력한다.

case = []
for i in range(int(input())):
    d, e = map(int,input().split())
    case.append([d, e, e-d])

result = []
for i in case:
    r = 0
    count = 0
    m = 0

    while True:
        m += 1
        r += m
        count += 1
        if i[2] <= r:
            result.append(count)
            break
        r += m
        count += 1
        if i[2] <= r:
            result.append(count)
            break

for i in result:
    print(i)
  • r: 누적 이동 거리
  • count: 이동 횟수
  • m: 현재 단계에서 한 번에 이동할 수 있는 거리
    이동 거리는 1부터 시작하며, 매 단계마다 1, 2, 3, ... 식으로 증가.(같은 거리만큼 두 번 반복)

공간이동 횟수의 수에는 규칙이 있음 -> 구간의 크기에 따라서 결정됨

11 22 33 44 55 66 77 88 99 1010 1111 1212 1313 1414 ,,, -> 개수  
12 34 56 78 910 ,,,, -> 횟수의 수  
구간의 크기가 순서대로 1부터 20까지 있다고 하면, 그 구간에 따른 정답은  -> 1 2 33 44 555 666 7777 8888이 됨.  
* (예) 구간의 크기가 8이면 정답은 5가 됨. / 구간의 크기가 10이면 정답은 6이 됨.