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을 반환한다.
- distance = y - x: 총 이동해야 할 거리를 계산한다.
- 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 |