본문 바로가기
프로그래밍/백준 알고리즘 코드

백준 2231번 JAVA 분해합 [브루트 포스]

by 졸린이 2021. 8. 18.
반응형

자연수 N을 입력하면 N의 가장 작은 생성자를 구해야 한다.

245의 분해합은 245 + 2 + 4 + 5 = 256이다. 245 그 자체의 수와 각 자릿수를 더한다.

256의 분해합은 245가 된다.

 

N으로 256을 입력하면 245가 출력되어야 한다. 256의 생성자는 245이다.

생성자는 있을수도 없을수도 있고 없으면 0을 출력한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        int N = sc.nextInt();
        
        int index = N; // 생성자가 되는지 살펴볼 변수 (N-1부터 1까지 검사)
        int res = 0// 결과값
        while(index > 0) {
            index--//N-1부터 생성자인지 확인한다. (N보다 낮은 수 이므로)
            int com = index; //생성자 자신 + 각 자릿수이므로 우선 자신 저장
            int unit = index; //각 자릿수를 구할 변수
            
            while(unit != 0) { //10으로 나눴을 때 몫이 0이면 모든 자릿수 검사 완료
                com += unit % 10//10으로 나누고 나머지를 더함 (1의 자리)
                unit /= 10// 10으로 나누고 몫을 저장 (한 자릿수 씩 낮춰짐)
            } // while 다 돌면 자신 수 + 각 자릿수 다 더한 것
            
            if(com == N) { // N과 같으면 생성자
                res = index;
            }
        } // 생성자가 여러개라도 1씩 낮추면서 더 낮은 생성자가 있으면 결과값이 새로 정의 된다.
        System.out.println(res);
    }
}
cs

 

설명은 주석에 다 있다.

반응형

댓글