알고리즘 & 코딩테스트
[백준] 1011번 Fly me to the Alpha Centauri
Haksae
2022. 3. 5. 04:06
⛏ 문제 파악
- x지점부터 y지점까지 가는데 필요한 최소한의 이동 횟수를 구하는 문제
- 단순한 이동이 아니라 조건이 있다.
- 이전에 이동한 거리의 -1, 0, +1 을 하여 이동할 수 있다. (가속과 감속이 가능한 시스템)
- 그리고 y지점에 도착하기 바로 직전의 이동거리는 1이어야한다. (도착 직전에는 1이어야한다.)
- 이 조건대로 이동을 해보면 다음과 같다. 아래와 같이 기록하여 발견할 수 있는 법칙은 2가지이다.
👉🏻 답안
- 위의 법칙으로 문제를 풀면 다음과 같다.
T = int(input())
for _ in range(T):
x, y = map(int,input().split())
distance = y - x # 이동해야하는 거리
count = 0 # 이동한 횟수
movement = 1 # 최대 이동 가능 거리
total_movement = 0 #총 이동 거리
while total_movement < distance: #총 이동거리가 이동해야하는 거리보다 작으면 while 반복
count += 1
total_movement += movement
if count % 2 == 0:
movement += 1
print(count)
📑 간단한 설명
- for _ in range(T)로 값을 받는 횟수를 지정해준다.
- 출발지점을 x로, 도착 지점을 y로 받는다. y-x를 통해서 이동해야하는 거리를 구한다.
- while 안에서 위의 법칙 1)과 2)를 구현한다.
- 2)는 아래와 같이 구현
- count +=1 // 카운트 증가
- total_movement += movement // 최대 이동 가능 거리 더하기
- 1)은 아래와 같이 구현
- if count %2 == 0: // 카우트가 2 증가하면
- movement += 1 // 최대 이동거리가 1 증가한다.
- 2)는 아래와 같이 구현