[백준 2231번: 분해합] java 풀이

Elmo·2022년 7월 23일
0

[백준] 알고리즘

목록 보기
3/39

🔔브루트 포스 알고리즘 문제이다.

주어진 자연수 N이 최대 1000000까지이므로 이를 고려하여 각 자릿수를 구하는 함수를 작성했다.

분해합은 자신과 분해된 자릿수들의 합이므로 어차피 생성자는 주어진 분해합인 N보다 작을 수 밖에 없다.

따라서 1부터 N미만까지 차례대로 생성자가 될 수 있을지 대조했을 때, 처음으로 생성자가 되는 수가 가장 작은 생성자가 될 것이다.

import java.util.Scanner;


public class Main {
	
	int DisassembleSum(int N) {
		for(int i=0; i<N; i++) {
			int m1 = i/1000000;
			int m2 = (i-m1*1000000)/100000;
			int m3 = (i-m1*1000000-m2*100000)/10000;
			int m4 = (i-m1*1000000-m2*100000-m3*10000)/1000;
			int m5 = (i-m1*1000000-m2*100000-m3*10000-m4*1000)/100;
			int m6 = (i-m1*1000000-m2*100000-m3*10000-m4*1000-m5*100)/10;
			int m7 = i-m1*1000000-m2*100000-m3*10000-m4*1000-m5*100-m6*10;
			int sum = i + m1+m2+m3+m4+m5+m6+m7;
			if(sum==N)
				return i;
		}
		return 0;
	}
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		Main Main = new Main();
		
		int N = scanner.nextInt();
		System.out.println(Main.DisassembleSum(N));
		
		scanner.close();
	}

}
profile
엘모는 즐거워

0개의 댓글