BAEKJOON-1011 : Fly to the Alpha Centauri
BEAKJOON-1011 : Fly to the Alpha Centauri

이 문제는 탐색으로도 풀 수 있을 것 같은데, 문제 조건 때문에 까다로울 것 같다.
나는 쉽게 풀 수 있으면 쉽게 풀자는 생각을 갖고 있어서 공식을 세워서 풀었다.
하 … 설명하기가 무척 힘들 것 같다 😵
공식을 세우기 위해 먼저 거리가 1,2,3,4,…,n일때 몇 번 움직여야 하는지를 구했다.
distance | move | turn | num |
---|---|---|---|
1 | 1 | 1 | 1 |
2 | 2 | 1 | 0 |
3 | 3 | 2 | 1 |
4 | 3 | ||
5 | 4 | 2 | 0 |
6 | 4 | ||
7 | 5 | 3 | 1 |
8 | 5 | ||
9 | 5 | ||
10 | 6 | 3 | 0 |
11 | 6 | ||
12 | 6 | ||
13 | 7 | 4 | 1 |
일단 distance와 move를 보자. move 를 보면 값이 올라가는 규칙이 보인다.
1: 1개, 2: 1개, 3: 2개, 4: 2개, 5: 3개, 6: 3개, 7: 4개 …
여기서 move 값의 개수가 1,1,2,2,3,3,4,4,5,5, .. 이런 식으로 2번째마다 값이 1 증가하는 것을 볼 수 있다.
move의 갯수를 의미하는 것이 turn이고, 2번째마다 turn의 값을 올려주는 변수가 num이다.
코드
n = int(input())
for _ in range(n):
start, end = map(int, input().split())
distance = end - start
move, turn, num = 0, 0, 0
i = 0
while i < distance:
num = (num + 1) % 2
if num:
turn += 1
i += turn
move += 1
print(move)
변수들과의 관계는 파악하기 쉬웠지만, 막상 코드로 구현하기에는 내 머리가 잘 안 돌아가서 힘들었다..
난 항상 방법은 생각해내는데, 실현하기까지가 오래걸리는 것 같다. 이부분만 좀 보안하자..
댓글남기기