[백준 2231번 분해합]

개발하는 구황작물·2022년 10월 24일
0

알고리즘

목록 보기
5/8

브루트 포스를 이용하여 푸는 문제이다.

문제 자체는 매우 간단하다. 그냥 1부터 +1씩 증가시키면서 분해합과 N을 비교한 후 분해합이 N과 같으면 생성자를 출력하고 만약 생성자가 존재하지 않으면 0을 출력하면 되는 문제이다.

하지만 한가지 신경써야 하는 부분이 있었다.

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());

        int answer = 0;
        while(true) {
            answer++;
            int decomposition = sum(answer);
            if(decomposition == N) {
                break;
            }
            if(answer > N) {
                answer = 0;
                break;
            }
        }

        System.out.println(answer);

    }

    static int sum(int answer) {
        int temp = answer;
        int digitSum = 0;
        while(answer > 0) {
            digitSum  += answer % 10;
            answer /= 10;
        }
        return digitSum + temp;
    }
}
while(true) {
            answer++;
            int decomposition = sum(answer);
            if(decomposition == N) {
                break;
            }
            if(answer > N) {
                answer = 0;
                break;
            }
        }

여기에서 자연수 N과 비교해야 하는 값 설정에 주의를 해야했다.

예를 들어 N = 17일때 정답은 13으로 17 = 13 + 1 + 3 이다.
그러나 17과 분해합을 비교를 한다면 answer이 9일때

분해합 = 9 + 9
17 < 분해합

이 되어버려 루프문이 예상보다 일찍 끝나게 된다.

profile
어쩌다보니 개발하게 된 구황작물

0개의 댓글