BOJ 1484, 다이어트
ProblemSolving ·이 문제는 수학 문제라고 생각이 듭니다.
풀이
범위만 잘잡아서 이중포문만 돌려주면 되는 간단한 문제입니다.
i의 범위가 sqrt(n)부터 5만까지 잡았냐면 i의 제곱이 n보다 커야 j의 제곱을 빼줄 수 있기 때문에 n의 제곱근값으로 시작을 해주었습니다.
그리고 왜 5만까지냐면 5만이 넘어가게 되는 순간 제곱의 차이가 n의 범위값인 10만을 넘어가기 때문입니다. j는 당연히 i보다 작아야겠죠 ㅎ
해당하는 값이 있는지 없는지는 chk배열로 체크해줬답니다 ㅎㅎ
#include<iostream>
#include<stdio.h>
#include<cmath>
using namespace std;
typedef long long ll;
int n, chk;
int main()
{
scanf("%d", &n);
for (int i = sqrt(n); i <= 50000; i++) // i최대 50000
for (int j = 1; j < i; j++)
{
if (i * i - j * j == n)
{
chk = 1;
printf("%d\n", i);
}
}
if (chk == 0)
printf("-1");
return 0;
}