본문 바로가기

Algorithm/Mathematics

Baekjoon 1977 완전제곱수

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

소스결과 1988KB / 0 ms

출처 Baekjoon

언어 C++ 17

분류 수학

 

설명

M ~ N 사이에 존재하는 완전 제곱수를 찾아 수의 합과 최소값을 출력하자.

 

완전제곱수의 개념만 알면 쉽다. 최적화도 가능하지만 최대 범위가 100 이기 때문에 1부터 진행하자.

1부터 제곱 했을때 M ~ N 사이에 있다면 합에 더하고 최소값을 갱신한다.

 

알고리즘

1. M, N을 입력 받는다.

2. 1부터 100까지 반복한다.

 2 - 1. 현재 수를 제곱 했을 때 M ~ N 범위안에 포함되는지 확인한다.

 2 - 2. 포함이 된다면 최소값인지 판별한 후 갱신한다.

 2 - 3. 포함 된다면 합에 더한다.

3. 2를 통해 구해진 값이 없다면 -1을 출력한다. 존재 한다면 합과 최솟값을 출력한다.

 

소스코드

#include <iostream>

using namespace std;

int main()
{
	int m, n;
	int resMax = 0, res = -1;

	cin >> m >> n;

	for (int i = 1; i <= 100; i++)
	{
		int pow = i * i;

		if (pow < m)
			continue;

		if (res == -1)
			res = pow;

		if (pow > n)
			break;

		resMax += pow;
	}

	if (resMax == 0)
		cout << -1;
	else
		cout << resMax << '\n' << res;


	return 0;
}

'Algorithm > Mathematics' 카테고리의 다른 글

Baekjoon 6588 골드바흐의 추측  (0) 2019.04.01
Baekjoon 1789 수들의 합  (0) 2019.04.01
Baekjoon 1212 8진수 2진수  (0) 2019.03.31
Baekjoon 1037 약수  (0) 2019.03.31
Baekjoon 16563 어려운 소인수분해  (0) 2019.03.31