1011번: Fly me to the Alpha Centauri
우현이는 어린 시절, 지구 외의 다른 행성에서도 인류들이 살아갈 수 있는 미래가 오리라 믿었다. 그리고 그가 지구라는 세상에 발을 내려 놓은 지 23년이 지난 지금, 세계 최연소 ASNA 우주 비행
www.acmicpc.net
손으로 차근차근 적어 내려가면 할 수 있는 문제지만
도무지 어떻게 코딩해야하는지 감이 오질 않았다.
이동거리 | 횟수 | ||||||||
1 | 1 | 1회 | |||||||
2 | 1 | 1 | 2회 | ||||||
3 | 1 | 1 | 1 | 3회 | |||||
4 | 1 | 2 | 1 | 3회 | |||||
5 | 1 | 2 | 1 | 1 | 4회 | ||||
6 | 1 | 2 | 2 | 1 | 4회 | ||||
7 | 1 | 2 | 2 | 1 | 1 | 5회 | |||
8 | 1 | 2 | 2 | 2 | 1 | 5회 | |||
9 | 1 | 2 | 3 | 2 | 1 | 5회 | |||
10 | 1 | 2 | 3 | 2 | 1 | 1 | 6회 | ||
11 | 1 | 2 | 3 | 2 | 2 | 1 | 6회 | ||
12 | 1 | 2 | 3 | 3 | 2 | 1 | 6회 | ||
13 | 1 | 2 | 3 | 3 | 2 | 1 | 1 | 7회 | |
14 | 1 | 2 | 3 | 3 | 2 | 2 | 1 | 7회 | |
15 | 1 | 2 | 3 | 3 | 3 | 2 | 1 | 7회 | |
16 | 1 | 2 | 3 | 4 | 3 | 2 | 1 | 7회 |
이런식으로 25까지 쭉 써서 규칙을 찾아보았다.
이동 해야하는 거리가 N광년일 때, 한 번에 최대로 이동할 수 있는 거리는 (int)√N 광년이다.
(int)√N을 X라고 하자.
ex) 이동 해야하는 거리가 26광년이면 √26 = 5.xxx이므로 X = 5
한 번에 최대로 이동할 수 있는 거리가 X 광년일 때
최소 이동 횟수는 2X - 1번이며
최대 이동 횟수는 2X + 1번이다.
2X + 2번 이동하려고 할 때, X값이 1씩 증가한다.
ex) 최대 이동 거리가 4 광년이면
1 2 3 4 3 2 1로 이동해야 한다.
이 때 최소 이동 횟수는 7회이다 (4 x 2 - 1)
이때 최대 이동 거리를 변경하지 않고 최대로 이동할 수 있는 방법은
1 2 3 4 4 4 3 2 1이다. (24광년 이동)
위 규칙을 정리하면
N : 이동해야하는 거리
X : 한 번에 최대로 이동할 수 있는 거리
case 1 ) N - (X * X) = 0일 때
이동 횟수 : 2X - 1
case 2 ) n - (X * X) ≤ X 일 때
이동 횟수 : 2X
case 3 ) 나머지 경우
이동 횟수 : 2X + 1
수학적인 증명은 잘 모르겠고.. 끄적끄적 하다보니 규칙을 찾았다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void)
{
int t, i, start, end, distance, root, square, count = 0;
scanf("%d", &t);
for (i = 0; i < t; i++)
{
scanf("%d %d", &start, &end);
distance = end - start;
root = (int)sqrt(distance);
square = root * root;
count = 2 * root - 1;
if (distance - square == 0)
;
else if (distance - square <= root)
count++;
else
count += 2;
printf("%d\n", count);
}
return 0;
}
'공부하자 > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 2559번 - 수열 [Java, Python] (0) | 2023.06.05 |
---|---|
백준 알고리즘 3109번 - 빵집 [Java] (0) | 2022.06.26 |
백준 알고리즘 2615번 - 오목 [Java] (0) | 2022.06.19 |
백준 알고리즘 1074번 - Z [Python] (0) | 2021.12.24 |
백준 알고리즘 12865번 - 평범한 배낭 [C] (0) | 2021.09.12 |