정신과 시간의 방
카테고리
작성일
2024. 8. 9. 20:39
작성자
risehyun
  • 문제

 

  • 풀이
#include<iostream>
#include <queue>

using namespace std;

int main()
{
	int n = 0;

	while (true)
	{
		cin >> n;

		if (n == -1)
		{
			break;
		}

		queue<int> s;
		int sum = 0;

		for (int i = 1; i < n; i++)
		{
			if (n % i == 0)
			{
				s.push(i);
				sum += i;
			}
		}

		if (sum != n)
		{
			cout << n << " is NOT perfect." << '\n';
		}
		else
		{
			cout << n << " = ";

			int size = s.size();
			for (int i = 0; i < size; i++)
			{
				cout << s.front();
				s.pop();

				if (false == s.empty())
				{
					cout << " + ";
				}
			}
			cout << '\n';
		}

	}

	return 0;
}

 

  • 메모
    약수의 개수가 얼마나 될지 알 수 없기 때문에 배열을 사용하지 않았다.
    마지막에 저장된 값을 빼낼 때 가장 먼저 저장된 값부터 차례대로 출력해야 하기 때문에 스택 대신 큐를 사용했다.