BOJ 2231

2020-02-14

위 문제는 백준 사이트의 알고리즘 2231 문제에 관한 설명입니다.


문제

어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다.

자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오.

입력

첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다.

출력

첫째 줄에 답을 출력한다. 생성자가 없는 경우에는 0을 출력한다.


import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int N = scanner.nextInt();
        int index = N;
        int result = 0;
        while (index>0)
        {
            index -- ;
            int comp =index;
            int unit = index;
            while(unit!=0)
            {
                comp+=unit %10;
                unit/=10;
            }
            if(comp == N) result = index;
        }
        System.out.println(result);

    }
}

index에 N값을 넣고 하나씩 줄여나가는 방법을 사용했습니다.

“while문에 조건식으로 true를 넣어도 동작은 하나 되도록이면 조건식을 넣어주는게 좋다.”라는 이야기를 들었습니다.

index–로 값을 하나씩 줄여가면서 분해합을 구합니다.

순차적으로 내려가면서 분해합이 N인 가장 작은 생성자가 result에 저장되게 되며

결과값으로 result가 출력을 시키면 가장 작은 생성자 저장이 출력 됩니다.

블랙잭