- 문제
- 풀이
#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;
}
- 메모
약수의 개수가 얼마나 될지 알 수 없기 때문에 배열을 사용하지 않았다.
마지막에 저장된 값을 빼낼 때 가장 먼저 저장된 값부터 차례대로 출력해야 하기 때문에 스택 대신 큐를 사용했다.
'코딩테스트' 카테고리의 다른 글
[백준/2581번/C++] 소수 (0) | 2024.08.11 |
---|---|
[백준/11653번/C++] 소인수분해 (0) | 2024.08.10 |
[백준/2501번/C++] 약수 구하기 (0) | 2024.08.08 |
[백준/5086번/C++] 배수와 약수 (0) | 2024.08.06 |
☆ [백준/2903번/C++] 중앙 이동 알고리즘 (0) | 2024.08.04 |