분해합

이윤설·2024년 4월 9일

제출코드

import java.io.*;

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());
		
        // 성자를 찾지 못했을 때를 대비해 answer 변수를 0으로 초기화
        int answer = 0;

        for (int i = 1; i < N; i++) {
            int sum = i;
            int temp = i;

            while (temp > 0) {
                sum += temp % 10;
                temp /= 10;
            }

            if (sum == N) {
                answer = i;
                break; // 가장 작은 생성자를 찾았으므로 반복을 종료
            }
        }

        System.out.println(answer);
    }
}
  • 생성자 찾기: 1부터 N-1까지 모든 수에 대해 반복문을 실행한다.
    각 수를 생성자 후보(i)로 가정하고, 생성자인지 확인한다.

  • 분해합 계산: 생성자 후보 i와 그 수의 각 자릿수를 더해 sum 변수에 저장한다.
    이를 위해, temp 변수에 i를 복사하고, temp가 0보다 큰 동안 temp의 마지막 자릿수를 sum에 더하고 temp를 10으로 나누어 다음 자릿수로 넘어간다. 이 과정을 통해 i의 각 자릿수의 합을 i에 더한 분해합을 계산한다.

  • 생성자 확인: 계산된 sum이 입력받은 N과 같다면, i는 N의 생성자다.
    이때, answer에 i를 저장하고 반복문을 종료(break)한다.
    반복문을 종료하는 것은 N의 생성자 중 가장 작은 값을 찾기 위함입니다.

무조건 다시풀어봐야함

profile
화려한 외면이 아닌 단단한 내면

0개의 댓글