Computer Science/Algorithm Problem

백준] 14563 - 완전수(중앙대학교 CodeRace 2017)

TwinParadox 2018. 7. 27. 20:50
728x90

시간 제한 : 1초

메모리 제한 : 128MB




입력

첫째 줄에 자연수의 개수 T가 주어진다. T은 1000보다 작은 수이다.

둘째 줄에는 공백을 사이에 두고 완전수인지 구해야 되는 자연수 N이 주어진다.(N<10000)




출력

T개 줄에 걸쳐서 각 자연수에 대해서 완전수면 ‘Perfect’, 부족수면 ‘Deficient’, 과잉수면 ‘Abundant’를 출력한다.




소스코드

#include <iostream>
#include <vector>
using namespace std;
int main(void)
{
	int t, sum, tmp;
	cin >> t;
	vector<int> arr(t);
	for (int i = 0; i < t; i++)
		cin >> arr[i];

	for (int i = 0; i < t; i++)
	{
		if (arr[i] == 1)
			cout << "Deficient\n";
		else
		{
			sum = 1;
			for (int j = 2; j < arr[i] / 2; j++)
			{
				if (arr[i] % j == 0)
				{
					if (arr[i] / j == j)
						sum += j;
					else if (arr[i] / j > j)
						sum += (arr[i] / j + j);
					else
						break;
				}
			}
			if (sum == arr[i])
				cout << "Perfect\n";
			else if (sum < arr[i])
				cout << "Deficient\n";
			else
				cout << "Abundant\n";
		}
	}
}




Tip

약수를 구할 줄 알면 문제를 잘 풀 수 있다. 필자는 이 문제를 계속 틀렸는데, 1일 경우에 완전수로 처리했기 때문이다.



728x90