티스토리 뷰

728x90

문제

- 어떤 자연수 N이 있을 때, 그 자연수의 분해합은 N과 N을 이루는 각 자리수의 합

- 어떤 자연수 M의 분해합이 N인 경우, M은 N의 생성자

- 어떤 자연수의 경우에는 생성자가 없을 수도 있음

- 생성자가 여러 개인 자연수도 있을 수 있음

- 자연수 N이 주어졌을 때, N의 가장 작은 생성자 출력

- 생성자가 없는 경우에는 0 출력

 

해결방법

1부터 주어진 자연수까지 숫자를 1씩 증가시키면서 분해합을 구하는 방식으로 코드를 작성하였다. 분해합을 구할 때에는 각자리 수를 더해주기 위해서 나머지 연산, 나누기 연산을 활용하였고, 연산이 끝나면 해당 숫자를 또 더해줘 분해합을 구한 뒤 해당 숫자가 생성자인지 확인할 수 있도록 하였다.

 

코드

import java.io.*;
import java.util.*;

class Main{
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());		// 자연수 입력
        int result = 0;						// 생성자를 저장할 변수


        for(int i = 1; i<N; i++){
            int num = i;		// 나머지, 나누기 연산을 하기 위해 값 복사
            int sum = 0;		// 분해합 구하기 위한 변수

            while(num != 0){
                sum += num % 10;	// 나머지 연산을 통해 각 자리를 더해줌
                num /= 10;		// 다음 자리를 더하기 위해 나누기 연산을 진행
            }

            if(sum + i == N){		// 위에서 계산한 값에 현재 값을 더해서 구한 분해합이 생성자인지 비교
                result = i;
                break;
            }
        }

        System.out.println(result);

        br.close();
    }
}
728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday