문제풀이/#Python

백준(Baekjoon) 1011번 : Fly me to the Alpha Centauri

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

 

1011번: Fly me to the Alpha Centauri

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

www.acmicpc.net

#코드

T = int(input())
for i in range(T):
    x,y = map(int, input().split())
    Distance = y-x
    count = 1 #공간이동 장치 작동 횟수 반복 확인
    while True:
        BeforeValue = count **2 #공간이동 장치 작동 횟수 반복되는 수 중 중간 값
        if Distance <= BeforeValue+count and Distance >= BeforeValue-(count-1): #Distance가 DeforeValue 영역 내에 있을 경우
            if Distance > BeforeValue: #만약 Distance가 중간 값보다 클 경우
                print(2*count) #공간이동 장치 작동 횟수 출력
                break
            else:
                print((2*count)-1) #공간이동 장치 작동 횟수 출력
                break
        else:
            count+=1

#풀이과정

1. 입력 값 확인

T = 테스트 케이스
x = 처음 위치
y = 도착 위치

# x는 y보다 반드시 작아야 한다.

2. 출력 값 확인

처음 위치에서 도착 위치까지 이동을 시도한 횟수

3. 조건 확인

한번 이동을 했다면(k)
그 다음에는 k-1, k, k+1 3개 중 하나로 이동이 가능하다.

마지막 도착 하기 전에는 반드시 1광년만 이동 가능

ex : 1광년 이동 했을때  0광년 1광년 2광년 이동이 가능하지만 0광년는 의미가 없으니 제외

4. 계산식 확인

거리를 계산하기 위해서 제곱(**)을 활용하여 구할 수 있고 바로 그 다음 거리의 공간이동 작동 횟수를 구할 수 있음을 확인

총 이동해야 하는 거리 (Distance) 이동 거리 공간이동 작동 횟수 반복횟수 Distance 계산 횟수 계산
1 1 1 1 1의 제곱  
2 11 2   1 x 2
3 111 3 2    
4 121 3 2의 제곱  
5 1211 4 2   2x2
6 1221 4    
7 12211 5 3    
8 12221 5    
9 12321 5 3의 제곱  
10 123211 6 3   3x2
11 123221 6    
12 123321 6    
13 1233211 7 4    
14 1233221 7    
15 1233321 7    
16 1234321 7 4의 제곱  
17 12343211 8 4   4x2
18 12343221 8    
19 12343321 8    
20 12344321 8