백준's 단계별 풀이

Stage_8 (기본수학1) 1011번 Fly me to the Alpha Centauri

푸른잎 뱅갈고무나무 2021. 3. 21. 02:32

x와 y 사이를 우주선으로 가는데

  1) s= 양끝단 거리 / v = 최고 속도 (이동거리 / 1워프)

  2) 시작점에서 1부터 증가 --> 최고 속도에 이름 --> 1씩 속도 감소 (등차수열)

      ex) 속도 = [1, 2, 3, ...., v, 알파, v-1, v-2, ..., 2, 1]

  3) 따라서 속도의 합 = v(v+1)/2 * 2 - v + 알파       *여기서 v(v+1)/2는 1부터 v까지의 합을 의미

  4) 풀어서 쓰면 속도의 합(s) = v^2 + 알파 // 즉, s = v^2 + 알파 // v = s^0.5 가 된다.

      ex1) 거리가 120이라면, 최고 속도는 10이 되고 거리의 나머지는 20가 된다.

            그런데 나머지가 19가 최고속도 10보다 크기 때문에 10, 10 이렇게 회수 2번 추가

      ex2) 거리가 121이면 최고 속도는 11이되고 거리의 나머지는 0. 회수 추가 없음

      ex3) 거리가 122이면 최고 속도는 11, 거리의 나머지는 1이기 때문에 회수 1번 추가



T = int(input())

for k in (range(T)):

 

# s = 

 

T = int(input())

for k in (range(T)):

  x, y = map(intinput().split())

  s = y-x

  v = int(s**0.5)

  s1 = sum(range(v+1))*2-v

  if v == 1: print (s)

  elif s1 == s: print(2*v-1)

  elif s -s1 <= v:print(2*v)

  elif s -s1 >= v:print(2*v+1)