Computer Science/Algorithm Problem

백준 알고리즘] 1977 - 완전제곱수(KOI 2006 지역본선)

TwinParadox 2017. 9. 27. 22:20
728x90

시간 제한 : 2

메모리 제한 : 128 MB




문제

M과 N이 주어질 때 M이상 N이하의 자연수 중 완전제곱수인 것을 모두 골라 그 합을 구하고 그 중 최소값을 찾는 프로그램을 작성하시오. 예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 완전제곱수는 64,  81,  100 이렇게 총 3개가 있으므로 그 합은 245가 되고 이 중 최소값은 64가 된다.






입력

첫째 줄에 M이, 둘째 줄에 N이 주어진다. M과 N은 10000이하의 자연수이며 M은 N보다 같거나 작다.






출력

M이상 N이하의 자연수 중 완전제곱수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최소값을 출력한다. 단, M이상 N이하의 자연수 중 완전제곱수가 없을 경우는 첫째 줄에 -1을 출력한다.





소스코드

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    int n, m, cnt = 0, sum = 0, min;
    cin >> n >> m;
    for (int i = n; i <= m; i++)
    {
        if ((sqrt(i) - (int)sqrt(i)) == 0)
        {
            cnt++;
            sum += i;
            if (cnt == 1)
                min = i;
        }
    }
    if(sum>0)
        cout << sum << endl << min;
    else
        cout<<"-1";
    return 0;
}


728x90