백준/solved.ac
# 1011 Fly me to the Alpha Centauri
bright_code
2020. 10. 2. 09:48
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 씩 올려 주었다.
1011번: Fly me to the Alpha Centauri
우현이는 어린 시절, 지구 외의 다른 행성에서도 인류들이 살아갈 수 있는 미래가 오리라 믿었다. 그리고 그가 지구라는 세상에 발을 내려 놓은 지 23년이 지난 지금, 세계 최연소 ASNA 우주 비행��
www.acmicpc.net
728x90
반응형