백준 - JAVA/브루트 포스

[백준] 2231번 : 분해합 _ JAVA ( 주석 설명 )

wch_s 2023. 2. 14. 18:56

1번

→ 입력받은 자연수까지 완전 탐색을 하면서 가장 작은 생성자를 구하는 문제

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //버퍼에서 데이터를 읽어오는 방식으로 속도가 빠르다.
        int N = Integer.parseInt(br.readLine()); //자연수 N을 입력받는다.

        int result = 0; //가장 작은 생성자를 담을 변수이다.
        for(int i=1;i<=N;++i){ //분해합 = N + N을 이루는 각 자리수의 합
            int sum = i;  //분해합 중 'N'이다.
            int num = i; //각 자리수의 합을 구하기 위한 변수이다.
            while(num>0){
                sum += num%10; //각 자릿수의 합을 더한다.
                num/=10;
            }

            if(sum==N) { //입력받은 N의 생성자일 시, 그 값을 저장한다.
                result = i;
                break; //문제에서 가장 작은 생성자를 원하므로, 구한 즉시 break를 해준다.
            }
        }
        System.out.println(result); //가장 작은 생성자를 출력한다.
    }
}