BOJ 2231[백준 2231]
분해합
조건
- 자연수 N(1 <= N <= 100000)이 주어진다.
- 어떤 자연수 M이 있을 때, M의 분해합은 M과 M을 이루는 각 자릿수의 합이다.
- 어떤 자연수 K의 분해합이 M일 경우, K는 M의 생성자이다.
- 생성자가 없는 경우 결과 값은 0이다.
결과
해결 방법
- 브루트포스 알고리즘으로, 모든 경우를 다 해본다.
- 1부터 N까지 분해합을 구한다.
- 분해합과 N을 비교하여, 같으면 생성자로 저장한다. 그리고 이전 생성자와 비교하여 작은 값을 선택한다.
- 생성자가 없다면, 0을 출력한다.
핵심 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| for(int i = 0; i < N; i++) { int sum = 0; if(i / 100000 != 0) { sum = i + (i / 100000) + ((i%100000)/10000) + ((i%10000)/1000) + ((i%1000)/100) + ((i%100)/10) + i%10; }else if(i / 10000 != 0) { sum = i + ((i%100000)/10000) + ((i%10000)/1000) + ((i%1000)/100) + ((i%100)/10) + i%10; }else if(i / 1000 != 0) { sum = i + ((i%10000)/1000) + ((i%1000)/100) + ((i%100)/10) + i%10; }else if(i / 100 != 0) { sum = i + ((i%1000)/100) + ((i%100)/10) + i%10; }else if( i / 10 != 0) { sum = i + ((i%100)/10) + i%10; }else { sum = i + i%10; } if(sum == N && result > i) { result = i; } } if(result == N) { result = 0; } System.out.print(result);
|
전체 소스 코드는 여기서 확인하실 수 있습니다.