Home Fly me to the Alpha Centauri - baekjoon 1011번
Post
Cancel

Fly me to the Alpha Centauri - baekjoon 1011번

Fly me to the Alpha Centauri

한번 이동하고 난 후, -1, 0, 1을 이동할 수 있는 공간 이동 장치가 있다.
x지점부터 y지점까지 이동하는데 공간이동 장치 작동을 몇번하는지 구하는 문제이다.

접근 방법

image

이동 거리와 작동 횟수를 표로 정리한 것이다.
이를 보면, 이동 거리 1과 2는 반복횟수가 1번씩, 3~6은 2번씩, 7~12는 3번씩 늘어나는 규칙을 찾을 수 가 있다.

image

빨간선은 반복횟수를 기준으로 나눈 것이다.
반복횟수의 기준이 되는 이동 거리를 구한다면 2, 6, 12 …이 될 것이다.
그러면 공식은 n * (n + 1) 될 것이다.

image

파란선은 빨간선에서 구간 별로 나눈 것에서 작동 횟수를 구하기 위함이다.
n**2 보다 크면 공간이동 작동 횟수 = n * 2,
n**2 보다 작거나 같으면 공간이동 작동 횟수 = n * 2 - 1 이 된다.

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import sys
input = sys.stdin.readline

T = int(input())

for _ in range(T):
	x, y = map(int, input().split())
	distance = y - x
	
	n = 0
	
	while True:
		if distance <= n*(n+1):
			break
		n += 1
	
	# 총 이동 거리가 n의 제곱보다 작거나 같을 때
	if distance <= n**2:
		print(n*2-1)
	# 총 이동 거리가 n의 제곱보다 클 때
	else:
		print(n*2)


참고