

이번 문제는 주어진 수 n의 약수를 구한 뒤, 해당 수가 완전수인지 판단하는 문제이다. 완전수라면 입력값과 약수들의 합을 출력하고, 아니라면 "is NOT perfect."를 출력해야 한다.
약수들을 출력하기 위해서는 값을 저장할 필요가 있었고, 이를 위해 자료구조를 고민하다가 가장 익숙한 배열을 사용하여 구현했다.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Numerics;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp3
{
internal class math1
{
static void Main(string[] args)
{
//백준 9506 약수들의 합
while (true)
{
int n = int.Parse(Console.ReadLine());
int sum = 0;
if (n == -1)
break;
int[] arr = new int[n]; // 약수를 저장할 배열 (인덱스 = i-1)
for (int i = 1; i < n; i++) // 자기 자신 제외 (완전수는 자기 자신을 제외한 수의 합)
{
if (n % i == 0)
{
sum += i;
arr[i - 1] = i;
}
}
// 완전수 판별 (자기 자신을 제외한 약수의 합이 n과 같으면 완전수)
if (sum == n)
{
Console.Write(n + " = ");
bool first = true; // 첫 번째 출력 여부 체크 (+ 출력 제어용)
for (int i = 0; i < arr.Length; i++)
{
if (arr[i] != 0) // 약수인 경우만 출력
{
if (!first) // 첫 번째가 아니면 앞에 " + " 추가
Console.Write(" + ");
Console.Write(arr[i]); // 약수 출력
first = false; // 첫 출력 이후 false로 변경
}
}
Console.WriteLine(); // 한 줄 마무리
}
else
{
Console.WriteLine(n + " is NOT perfect."); // 완전수가 아닌 경우
}
}
}
}
}
배열로 구현한 뒤, 다른 사람들은 어떤 방식으로 문제를 해결했는지 찾아보았다.
C++을 사용하는 경우에는 Vector<int>를, 파이썬이나 자바에서는 List를 사용하는 풀이가 많았다. 이를 보면서 C#에서도 List를 활용하면 코드가 더 간결해질 수 있겠다는 생각이 들었다.
배열은 크기가 고정되어 있기 때문에 약수가 아닌 값도 포함될 수 있어, 불필요한 공간이 발생하고 추가적인 조건 처리가 필요하다.
현재 코드에서도 조건을 통해 약수만 저장하고 0이 출력되지 않도록 처리할 수 있었지만, 사용되지 않는 공간이 존재한다는 점은 아쉬운 부분이었다.
반면 List를 사용하면 약수만 선택적으로 추가할 수 있어 불필요한 공간을 줄일 수 있고, 보다 직관적인 구현이 가능하다고 느꼈다.
while (true)
{
int n = int.Parse(Console.ReadLine());
if (n == -1) break;
int sum = 0;
List<int> list = new List<int>();
for (int i = 1; i < n; i++)
{
if (n % i == 0)
{
sum += i;
list.Add(i);
}
}
if (sum == n)
{
Console.Write(n + " = ");
for (int i = 0; i < list.Count; i++)
{
Console.Write(list[i]);
if (i != list.Count - 1)
Console.Write(" + ");
}
Console.WriteLine();
}
else
{
Console.WriteLine(n + " is NOT perfect.");
}
}

'코딩 테스트 > 백준' 카테고리의 다른 글
| 백준 - [단계별로 풀어보기 약수, 배수와 소수 1] 2581 소수 (0) | 2026.03.28 |
|---|---|
| 백준 - [단계별로 풀어보기 약수, 배수와 소수 1] 1978 소수 찾기 (0) | 2026.03.27 |
| 백준 - [단계별로 풀어보기 약수, 배수와 소수 1] 2501 약수 구하기 (0) | 2026.03.26 |
| 백준 - [단계별로 풀어보기 약수, 배수와 소수 1] 5086 배수와 약수 (0) | 2026.03.26 |
| 백준 - [단계별로 풀어보기 수학1] 1193 분수 찾기 (0) | 2026.03.25 |