목차
백준 단계별로 풀어보기
25.10.07
12단계: 브루트 포스
2231번: 분해합
문제 링크 : https://www.acmicpc.net/problem/2231
문제 풀이
>> 문제를 풀기 위해 알아야 할 개념
- 분해합과 생성자
: 어떤 자연수 M이 있을 때, 그 자연수 M의 분해합 N은 M과 M을 이루는 각 자리수의 합을 의미한다. 이때 M은 N의 생성자이다.
--> 생성자가 없는 자연수도 있고 반대로 생성자가 여러 개인 자연수도 있다. 예를 들어 20은 생성자가 없으며, 216은 198과 207의 생성자를 갖는다.
>> 풀이
- 생성자를 찾을 값을 입력 받아 int값으로 변환하고 결과로 출력할 값을 변수로 선언한다.
- for 반복문을 통해 1부터 '입력값 - 1'까지 아래 과정을 반복하며 모든 경우의 수를 테스트한다.
- i 값의 분해합을 담을 변수 sum과 i 값을 임시로 담을 변수 temp를 선언하고, i 값으로 초기화한다.
- temp 값이 0이 아닐 때까지 while 문을 반복하며 sum에 temp의 1의 자릿수를 더하고 temp를 10으로 나눈 몫을 다시 temp에 대입한다. 즉, temp 값의 1의 자리부터 순서대로 각 자리수를 sum에 더해서 i 값의 분해합을 찾아준다.
- 만약 i 값의 분해합이 입력값과 같다면 i가 입력값의 가장 작은 생성자이므로, 출력할 결과값에 i 값을 대입하고 for 반복문을 break 한다. --> 만약 생성자를 찾지 못했다면 자연스럽게 출력할 결과값은 처음 초기화한 "0"이 된다.
- 결과값을 출력한다.
정답 코드
class Backjoon
{
static void Main(string[] args)
{
int number = int.Parse(Console.ReadLine());
int result = 0;
for (int i = 1; i < number; i++)
{
int sum = i;
int temp = i;
while (temp != 0)
{
sum += temp % 10;
temp /= 10;
}
if (sum == number)
{
result = i;
break;
}
}
Console.Write(result);
}
}
'Development > Baekjoon' 카테고리의 다른 글
[C#] 1018번: 체스판 다시 칠하기 (0) | 2025.10.11 |
---|---|
[C#] 19532번: 수학은 비대면강의입니다 (0) | 2025.10.08 |
[C#] 2798번: 블랙잭 (0) | 2025.10.06 |
[C#] 24313번: 알고리즘 수업 - 점근적 표기 1 (1) | 2025.10.04 |
[C#] 24267번: 알고리즘 수업 - 알고리즘의 수행 시간 6 (0) | 2025.10.03 |