본문 바로가기
Algorithm/알고리즘 문제풀이

백준 1011번, 파이썬 - Fly me to the Alpha Centauri

by devraphy 2021. 8. 11.

https://www.acmicpc.net/problem/1011

 

1011번: Fly me to the Alpha Centauri

우현이는 어린 시절, 지구 외의 다른 행성에서도 인류들이 살아갈 수 있는 미래가 오리라 믿었다. 그리고 그가 지구라는 세상에 발을 내려 놓은 지 23년이 지난 지금, 세계 최연소 ASNA 우주 비행

www.acmicpc.net

 

# 최고속도를 찍는 지점을 찾는다. 이 경우, 세가지 경우가 발생한다. 
# 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)

댓글