[백준(JAVA)] 2231번: 분해합

세하·2024년 3월 13일

[백준] 문제풀이

목록 보기
35/94
post-thumbnail

문제

✔ 난이도 - Bronze 2

설명

생성자가 없는 경우에는 0을 출력해야한다는걸 명심!

for문을 0부터 돌려도 되긴 하지만 분해합은 N + N의 각자리수의 합 이기 때문에 가장 작은 생성자가 될 수 있는 수는 분해합에서 분해합의 자릿수 갯수만큼 9를 빼준 수임. 따라서 그 수부터 for문을 돌리면 더 좋음!
-> 각 자리수의 합이 가장 클 수 있을 때의 자리수 값은 9임!

풀이

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

public class Main{
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        //StringTokenizer st = new StringTokenizer(br.readLine());
        
        int num;
        int sum = 0;
        int result = 0; //생성자가 없으면 0 출력
        
        String inputData = br.readLine();
        int num_length = inputData.length();
        num = Integer.parseInt(inputData);

        for (int i = (num - num_length*9); i < num; i++){
            sum = 0;
            int tmp = i;
            while (tmp != 0){
                sum += tmp % 10;
                tmp /= 10;
            }
            if (i + sum == num){
                result = i; //생성자가 존재할 때 result에 값 삽입
                break;
            }
        }

        sb.append(result);
        br.close();

        System.out.print(sb);
    }
}

0개의 댓글