본문 바로가기

프로그래머스, 백준

백준 1011번 Fly me to the Alpha Centauri

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

 

 

 

 

 

입출력 조건은 다음과 같다.

 

 

이전에 k광년을 이동했다면 다음은 k-1,k,k+1 광년 중 하나다.

첫 이동은 1광년이고 도착 전 마지막 이동이 반드시 1광년이어야 한다.

총 이동거리가 n(n+1)/2보다 작거나 같을 때, n번의 이동으로 y에 도착할 수 있다.

 

 

  •  n(n+1)/2가 distance와 같거나 약간 크다면
    -> n번의 이동으로 도착지에 도달하거나 약간 지나칠 수 있으므로 n을 반환한다.
  • n(n+1)/2가 distance보다 작다면
    -> 추가로 한 번 더 이동해야 도착지에 도달 가능하여 n+1을 반환한다.

 

  1. distance = y - x: 총 이동해야 할 거리를 계산한다.
  2. while 루프 안에서:
    • 현재 step만큼 이동하고 moves를 증가시킨다.
    • 만약 목적지에 도달했거나 지났다면 루프를 종료한다.
    • 그렇지 않으면 다시 한 번 같은 거리를 이동힌다.
    • step을 1 증가시킨다.

 

def calculate_min_moves(x, y):
    distance = y - x
    moves = 0
    total_distance = 0
    step = 1

    while total_distance < distance:
        total_distance += step
        moves += 1
        if total_distance >= distance:
            break
        total_distance += step
        moves += 1
        step += 1

    return moves

def main():
    T = int(input())
    for _ in range(T):
        x, y = map(int, input().split())
        print(calculate_min_moves(x, y))

if __name__ == "__main__":
    main()

 

'프로그래머스, 백준' 카테고리의 다른 글

백준 1045번 도로  (0) 2024.10.30
백준 1012번 유기농 배추  (0) 2024.10.02
백준 1932번 정수 삼각형  (0) 2024.09.25
백준 2798번 블랙잭  (0) 2024.05.08
백준 2231번 분해합  (0) 2024.05.08