문제 링크입니다: https://www.acmicpc.net/problem/1011
별다른 알고리즘을 요구하지 않지만 규칙을 찾아야했던 문제였습니다.
최대 거리 |
워프 횟수 |
최고 속도 |
구현 |
1 |
1 |
1 |
1 |
4 |
3 |
2 |
121 |
9 |
5 |
3 |
12321 |
16 |
7 |
4 |
1234321 |
25 |
9 |
5 |
123454321 |
N^2 |
2*N-1 |
square(N) |
12345...N....54321 |
결국, N을 구하고 최대 거리 N^2을 빼줬을 때 남은 거리에 대한 워프 횟수를 구해주면 되는 문제였습니다.
워프 횟수는 N(한 번 워프에 최대로 갈 수 있는 거리)으로 나눈 뒤 일의 자리에 대해 올림해주는 방식으로 처리해주면 됩니다.
#include <iostream>
#include <cmath>
using namespace std;
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int T;
cin >> T;
for (int t = 0; t < T; t++)
{
int x, y;
cin >> x >> y;
long long i = 1;
while (i * i <= (y - x))
i++;
i--;
long long remaining = (y - x) - (i * i);
remaining = (long long)ceil((double)remaining / (double)i);
cout << i * 2 - 1 + remaining << "\n";
}
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > BOJ' 카테고리의 다른 글
백준 2164번 카드2 (0) | 2019.03.07 |
---|---|
백준 10773번 제로 (0) | 2019.03.07 |
백준 11365번 !밀비 급일 (0) | 2019.03.04 |
백준 12738번 가장 긴 증가하는 부분 수열 3 (2) | 2019.03.04 |
백준 1708번 볼록 껍질 (1) | 2019.02.28 |