2021. 6. 28. 13:54ㆍ백준 알고리즘
문제
https://www.acmicpc.net/problem/1011
1011번: Fly me to the Alpha Centauri
우현이는 어린 시절, 지구 외의 다른 행성에서도 인류들이 살아갈 수 있는 미래가 오리라 믿었다. 그리고 그가 지구라는 세상에 발을 내려 놓은 지 23년이 지난 지금, 세계 최연소 ASNA 우주 비행
www.acmicpc.net
풀이
이 문제는 distance(행성 사이 거리)가 1인 경우부터 차근차근 구해봐야 일정한 규칙을 발견할 수 있습니다.
path: 이동 경로
cnt: 최소한의 공간이동 장치 작동 횟수
same_cnt_times: 같은 cnt가 연속된 횟수
distance | path | cnt | same_cnt_times | 행의 갯수 |
1 | 1 | 1 | 1 | 2 |
2 | 11 | 2 | 1 | |
3 | 111 | 3 | 2 | 4 |
4 | 121 | 3 | ||
5 | 1211 | 4 | 2 | |
6 | 1221 | 4 | ||
7 | 12211 | 5 | 3 | 6 |
8 | 12221 | 5 | ||
9 | 12321 | 5 | ||
10 | 123211 | 6 | 3 | |
11 | 123221 | 6 | ||
12 | 123321 | 6 | ||
13 | 1233211 | 7 | 4 | 8 |
14 | 1233221 | 7 | ||
15 | 1233321 | 7 | ||
16 | 1234321 | 7 | ||
17 | 12343211 | 8 | 4 | |
18 | 12343221 | 8 | ||
19 | 12343321 | 8 | ||
20 | 12344321 | 8 | ||
21 | 123443211 | 9 | 5 | |
22 | 123443221 | 9 | ||
23 | 123443321 | 9 | ||
24 | 123444321 | 9 | ||
25 | 123454321 | 9 |
위의 표를 보면 same_cnt_times로 묶었을 때 행의 개수가 등차수열의 규칙을 이룬다는 것을 알 수 있습니다.
표에서 노란색으로 표시한 부분을 2로 나눈 값이 등차수열의 항의 순서(n)가 됩니다.
$$ 등차수열의 합 = {n(2a + (n - 1)d) \over 2} $$
$$ a = 첫 항 $$
$$ d = 공차 $$
a = 2이고 d = 2이므로 등차수열의 합 = n(n + 1)
while문으로 입력받은 distance가 포함된 범위와 n을 구합니다.
distance에 매핑되는 cnt 는 2n-1이나 2n 중 하나가 됩니다.
- diff(등차수열의 합과 distance의 차이)가 n보다 작을 때, cnt = 2n - 1
- diff가 n보다 클 때, cnt = 2n
코드
import sys
t = int(sys.stdin.readline().rstrip()) # 테스트 횟수
for _ in range(t):
x, y = map(int, sys.stdin.readline().rstrip().split()) # 현재 위치: x, 목표 위치: y
cnt = 0 # 최소한의 공간이동 장치 작동 횟수
distance = y - x # 이동 거리
n = 0 # 등차수열의 항
while True:
n += 1
if distance <= (n * (n + 1)):
diff = n * (n + 1) - distance
if diff < n:
cnt = 2 * n
else:
cnt = (2 * n) - 1
break
print(cnt)
Ref.
https://ooyoung.tistory.com/91
백준 1011 [파이썬 알고리즘] : Fly me to the Alpha Centauri
[Python] 백준 알고리즘 온라인 저지 1011번 : Fly me to the Alpha Centauri Python3 코드 t = int(input()) for _ in range(t): x, y = map(int,input().split()) distance = y - x count = 0 # 이동 횟수 m..
ooyoung.tistory.com
https://calcproject.tistory.com/448
[수학I] 20. 등차수열의 합 구하는 방법 (개념+공식+수학문제)
| 같이 보면 좋은 글 📄 [수학I] 등차수열의 뜻 | 등차수열의 합 등차수열의 합은 등차수열의 성질을 이용하여 구할 수 있습니다. 등차수열의 성질은 다음과 같았습니다. 세 가지 성질 중 마지막
calcproject.tistory.com
'백준 알고리즘' 카테고리의 다른 글
[백준/Python] 11052_카드 구매하기 (0) | 2021.06.29 |
---|---|
[백준/Python] 9375_패션왕 신해빈 (0) | 2021.06.28 |
[백준/Python] 14499_주사위 굴리기 (0) | 2021.06.25 |
[백준/Python] 9184_신나는 함수 실행 (0) | 2021.06.25 |
[백준/Python] 12865_평범한 배낭 (0) | 2021.06.24 |