728x90
반응형
def fly():
    start, end = map(int,input().split())
    distance = end - start 

    cnt = 0 
    move = 1 
    max_move = 0 

    while max_move < distance : 
      cnt += 1 
      max_move += move 

      if cnt %2 ==0 : 
        move += 1 

    return cnt 


t = int(input())
data=[]

for i in range(t):
  data.append(fly())

for i in data:
  print (i)

 

총 거리 ( end - start )  최소로 움직이는 방법  이동 횟수 ( cnt ) 
1 1 1
2 11 2
3 111 3
4 121 3
5 1211 4
6 1221 4
7 12211 5
8 12221 5
9 12321 5

 

※ 규칙 찾기 

 

1. 이동 횟수는 1, 1, 2, 2, 3, 3, .. 이런식으로 반복되어 나온다. 

2. 각 이동 횟수 별 가장 큰 값은, 다음과 같은 방식으로 구할 수 있다. 

    1 -> 1 

    2 -> 1 + 1 

    3 -> 1 + 1 + 2 

    4 -> 1 + 1 + 2 + 2 

    5 -> 1 + 1 + 2 + 2 + 3 

 

※ 코드 설명 

나의 이동 거리가 전 이동 횟수의 가장 큰 값보다 크고,  현재 이동 횟수 별 가장 큰 값보다 작으면, 현재 이동 횟수의 값을 가짐을 이용. 

 

현재 이동 횟수의 가장 큰 값은, 숫자를 2번 씩 더해가므로 [ cnt % 2 == 0 ] 인 경우 마다 move 값을 1 씩 올려 주었다. 

 

www.acmicpc.net/problem/1011

 

1011번: Fly me to the Alpha Centauri

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

www.acmicpc.net

 

728x90
반응형

'백준 > solved.ac' 카테고리의 다른 글

# 1013 Contact  (0) 2020.10.02
20201001  (0) 2020.10.01
# 3003 # 3046 #5337 # 5338  (0) 2020.10.01
# 1000 #1001 # 1271 # 1550 # 2338 # 2475 # 2557 # 2558 # 2845 # 2914  (0) 2020.10.01

+ Recent posts