풀이는 아래와 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int T;
cin >> T;
for(int testcase=0; testcase<T; testcase++){
int x,y;
cin >> x >> y;
int d = y-x;
int max = floor(sqrt(d));
int ans = 0;
ans += 2*max - 1;
d -= max * max;
for(int i=max; i>0; i--){
while(d >= i){
d -= i;
ans++;
}
}
cout << ans << '\n';
}
return 0;
}
|
cs |
알고리즘 자체는 한번 잘 생각해보면 잘 해결할 수 있다.
우주선의 속도가 1,0,-1씩 변해야 한다는 점을 이용하였는데, 위의 코드에서 max란
해당 거리 d를 여행할 때 낼 수 있는 최대의 속도이다. 1부터 max까지, 그리고 max-1부터 1까지는
무조건 한번씩 들어가게 되고, 그 합은 max의 제곱이다. d- max*max인 나머지 거리는 max부터 1까지 내려가면서 최대한 끼워넣으면 된다. 이때 ans를 1씩 증가시키면 된다.
말이 쫌 내가 봐도 이상하니깐 알고리즘은 알아서 잘 생각해보길 바란다. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
반응형
'Baekjoon(C++)' 카테고리의 다른 글
[C++]백준 알고리즘 1002번 (2) | 2021.08.04 |
---|---|
[C++]백준 알고리즘 9020번 (0) | 2021.07.27 |
[C++]백준 알고리즘 11729번 (0) | 2021.07.18 |
[C++]백준 알고리즘 2447번 (1) | 2021.07.18 |
[C++] 띄어쓰기 포함 여러개 문자열을 입력받을때 (cin, getline에 대하여) (1) | 2021.07.15 |