[백준 9506] 약수들의 합

alsry._.112·2023년 8월 10일
0

백준

목록 보기
19/102

🔗문제 풀러가기
단계별로 풀어보기 단계 9의 3번째 문제이다.

문제 분석

입력받은 수의 약수들을 구해 vector에 저장한 후.
입력받은 수에서 약수들을 빼어 0인지 판별하여 완전수인지 판별하였다.

코드

#include <iostream>
#include <vector>
using namespace std;

int main()
{
	int input;

	vector<int> inputs;

	while (true)
	{
		cin >> input;
		inputs.push_back(input);
		if (input == -1) { break; }
	}

	for (int i = 0; i < inputs.size(); i++)
	{
		if (inputs[i] == -1) { return 0; }

		vector<int> divisors;

		int temp = inputs[i];
		for (int j = 1; j <= temp; j++)
		{
			if (temp % j == 0 && j != temp)
			{
				divisors.push_back(j);
			}
		}

		for (int j = 0; j < divisors.size(); j++)
		{
			temp -= divisors[j];
		}

		if (temp == 0)
		{
			cout << inputs[i] << " = ";
			for (int j = 0; j < divisors.size() - 1; j++)
			{
				cout << divisors[j] << " + ";
			}
			cout << divisors[divisors.size() - 1] << endl;
		}

		else
		{
			cout << inputs[i] << " is NOT perfect." << endl;
		}
	}
}

해석

  1. 테스트케이스 마다 한줄에 하나씩 출력해야 해야 하므로 while문을 수를 입력받아 vector에 저장한다.
  2. 마지막 수인 -1이 입력된다면 while문을 끝내고 입력받은 수들이 완전수인지 판별하는 for문을 실행한다.
  3. 입력받은 수가 -1이라면 실행을 종료하고 그렇지 않다면 입력받은 수의 약수를 구해 vector에 저장한다.
  4. vector에 저장한 약수들을 입력받은 수에서 빼주어 완전수 인지 판별한다.
  5. 완전수라면 약수들을 오름차순으로 출력하고,
    완전수가 아니라면 입력받은 수와 "is NOT perfect."를 출력해주면 끝!
profile
소통해요

1개의 댓글

comment-user-thumbnail
2023년 8월 10일

좋은 정보 감사합니다

답글 달기