코딩테스트 대비/단계별 코딩 테스트 준비(27일 과정)

[math2/Python] 1011번: Fly me to the Alpha Centaur - 효과는 굉장했다!

bluetag_boy 2022. 2. 11. 14:46
반응형
 

1011번: Fly me to the Alpha Centauri

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

www.acmicpc.net

 

알고리즘 분류

  • 수학

 

 

SOLUTION

import sys
from math import sqrt

T = int(sys.stdin.readline())

for _ in range(T):
    x, y = map(int, sys.stdin.readline().split())
    cnt = 0

    distance = y - x
    diff = int(sqrt(distance))

    # distance가 1,2,3 일 때 규칙에서 예외이므로 그대로 distance값 출력
    if distance < 4:
        cnt = distance
   
    # distance 가 distance의 제곱 + distance의 제곱근 일 때
    elif distance > diff**2 + diff:
        cnt = diff*2 + 1 

    elif diff**2 < distance <= diff**2 + diff:
        cnt = diff*2

    elif distance == diff**2:
        cnt = diff*2 - 1

    print(cnt)
    
'''
규칙 : 제곱근을 한계로 제곱 + 제곱근 형태 이후로 cnt += 1

1   1                   cnt = 1
2   11                  cnt = 2     1,2,3 일때는 예외 distance 값 그대로 cnt 에 할당됨
3   111                 cnt = 3     
4   121     (2^2)       cnt = 3   
5   1211                cnt = 4     
6   1221    (2^2 + 2)   cnt = 4     
7   12211               cnt = 5
8   12221               cnt = 5
9   12321   (3^2)       cnt = 5
10  123211              cnt = 6     
11  123221              cnt = 6 
12  123321              cnt = 6
13  1233211 (3^2 + 3)   cnt = 6
14                      cnt = 7 
'''