문제
풀이
수학, 두 포인터 문제이다.
- 몸무게는 0에서 시작할 수 없고, 현재 몸무게는 기억한 몸무게보다 커야 한다.
- 기억한 몸무게와 현재 몸무게를 두 포인터, start = 1, end = 2로 설정한다.
- 현재 start와 end일 때의 G를 current라고 할 때, current가 G 이하일 경우 end를 증가시켜 현재 몸무게를 더 늘려야 한다.
코드
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(NULL);
cout.tie(NULL);
int G;
cin >> G;
// 몸무게는 0에서 시작할 수 없고, start보다는 end가 커야 한다.
long long start = 1;
long long end = 2;
bool flag = false;
while (start < end)
{
// 현재 start와 end일때의 G인 current
int current = pow(end, 2) - pow(start, 2);
// end가 현재 가능한 몸무게일 경우
if (current == G)
{
flag = true;
cout << end << '\n';
}
// current가 이하라면 현재 몸무게를 더 늘려야 한다.
if (current <= G)
{
end++;
}
else
{
start++;
}
}
// 가능한 몸무게가 없는 경우
if (flag == false)
{
cout << "-1";
}
return 0;
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준][C++] 2473: 세 용액 (0) | 2023.12.04 |
---|---|
[백준][C++] 15565: 귀여운 라이언 (0) | 2023.12.03 |
[백준][C++] 17425: 약수의 합 (1) | 2023.11.30 |
[백준][C++] 2230: 수 고르기 (0) | 2023.11.29 |
[백준][C++] 2531: 회전 초밥 (0) | 2023.11.28 |