본문 바로가기

백준/C++

[C++] 백준 1977번 - 완전제곱수

728x90

 

문제 1977번

https://www.acmicpc.net/problem/1977

 

 

M이상 N이하의 자연수 중 완전제곱수인 것을 골라야하기 때문에 i를 1부터 i*i가 N보다 작거나 같을 때까지 반복해준다. 만약 i*i가 M보다 크거나 같다면 sum에 더해준다. 여기서 min이 아직 0이라면 가장 작은 첫번째 완전제곱근인 i*i를 min에 넣어준다. 그렇게 반복문을 마치고도 sum이 0이라면 완전제곱수가 없는 경우이기 때문에 -1를 출력해주고 아니라면 sum과 min을 출력해준다.

 

#include <iostream>

using namespace std;

int main() {
	int M, N, sum = 0, min = 0;
	cin >> M >> N;
	for (int i = 1; i * i <= N; i++) {
		if (i * i >= M) {
			if (min == 0) {	//최소값이 아직 업데이트가 안되어있다면
				min = i * i;
			}
			sum += i * i;
		}
	}

	if (sum == 0) {	//완전제곱수가 없는 경우
		cout << -1;
	}
	else {
		cout << sum << '\n' << min;
	}

	return 0;
}

 

 

 

 

 

 

 

728x90