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
'Computer Science > Algorithm Problem' 카테고리의 다른 글
백준 알고리즘] 1094번 - 막대기 (0) | 2017.09.30 |
---|---|
백준 알고리즘] 11004번 : K번째 수 (0) | 2017.09.29 |
백준 알고리즘] 2460 - 지능형 기차2(KOI 2011 지역본선) (0) | 2017.09.26 |
백준 알고리즘] 10804 - 카드 역배치(KOI 2015 지역본선) (0) | 2017.09.22 |
백준 알고리즘] 10801 - 카드게임(KOI 2015 지역본선) (0) | 2017.09.18 |