728x90
https://www.acmicpc.net/problem/1011
출발지 x와 도착지 y 사이의 거리를 구하고 그 차이가
거리 | 이동횟수 | ||
1 | 1의 제곱 | 1 (= 1 * 2 - 1) | 1개 연속 1 |
2 | 2 | 1개 연속 2 | |
3 | 3 | 2개 연속 3 | |
4 | 2의 제곱 | 3 (= 2 * 2 - 1) | |
5 | 4 | 2개 연속 4 | |
6 | 4 | ||
7 | 5 | 3개 연속 5 | |
8 | 5 | ||
9 | 3의 제곱 | 5 (= 3 * 2 - 1) | |
10 | 6 | 3개 연속 6 | |
11 | 6 | ||
12 | 6 | ||
13 | 7 | 4개 연속 7 | |
14 | 7 | ||
15 | 7 | ||
16 | 4의 제곱 | 7 (= 4 * 2 - 1) | |
17 | 8 | 4개 연속 8 | |
18 | 8 | ||
19 | 8 | ||
20 | 8 | ||
21 | 9 | 5개 연속 9 | |
22 | 9 | ||
23 | 9 | ||
24 | 9 | ||
25 | 5의 제곱 | 9 (= 5 * 2 - 1) | |
26 | 10 | 5개 연속 10 | |
27 | 10 | ||
28 | 10 | ||
29 | 10 | ||
30 | 10 |
이 규칙만 이용하면 된다
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int main() {
long long testCase;
cin >> testCase;
for (long long t = 0; t < testCase; t++) {
long long x, y;
cin >> x >> y;
long long distance = y - x;
if (sqrt(distance) == ceil(sqrt(distance))) cout << sqrt(distance) * 2 - 1 << '\n';
else if (pow(floor(sqrt(distance)), 2) + floor(sqrt(distance)) >= distance) {
cout << floor(sqrt(distance)) * 2 << '\n';
}
else cout << floor(sqrt(distance)) * 2 + 1 << '\n';
}
return 0;
}
728x90
'알고리즘 문제' 카테고리의 다른 글
[백준] 9020번 골드바흐의 추측 (0) | 2020.03.03 |
---|---|
[백준] 5337번 웰컴 (0) | 2020.03.01 |
[백준] 9252번 LCS 2 (0) | 2020.03.01 |
[백준] 11055번 가장 큰 증가 부분 수열 (0) | 2020.02.29 |
[백준] 15969번 행복 (0) | 2020.02.29 |