[백준,BOJ 2231] 분해합(JAVA 구현)
코테/백준 온라인 저지(BOJ)

[백준,BOJ 2231] 분해합(JAVA 구현)

반응형

-내 생각

  우선 알고리즘 공부를 시작하면서 자연수 n이 있을 때 각 자리수를 추출하는 방식은 공부했기 때문에 알고 있어서 푸는데 어려움은 없었다. 다만 반복문을 만들 때 범위를 어디까지 해야할까 생각해봤는데 자연수n의 범위가 1부터 1,000,000까지 였기 때문에 최소한 1,000,000을 넘는 생성자는 없다고 생각했다. 1,000,000의 경우에는 1,000,000+0+0+0+0+0+0+1 = 1,000,001이기 때문에 문제에서 주어진 자연수n의 범위를 초과하게 된다.

 

-해법

  비교적 간단하기 때문에 코드만 보고 이해가 가능할 것 같다.

 

import java.util.*;


public class Main {	
	public static boolean create(int x,int n) { // 생성자를 찾는 메소드
		int result = x;
		int temp = x;
		while(temp!=0) { // 전달된 정수가 만들 수 있는 결과를 찾는 과정 ex)2가 전달 될 경우 
        				 //result가 4가 되므로 2는 4의 생성자
			result += temp%10;
			temp/=10;
		}
		
		if(result == n) { // 이렇게 만들어진 정수가 입력받은 정수와 같다면
			
		return true; // 생성자가 존재하는 것.
		}
		else {return false;} // 그렇지 않다면 생성자가 존재하지 않는 것
		
	}
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int n = sc.nextInt();
		
		for(int i =1;i<1000000;i++) { // n의 범위만큼 반복
			if(create(i,n)) { // 생성자가 존재한다면,
				System.out.println(i); // i값을 출력, 1부터 비교하기 때문에 자연스레 최소값이 찾아진다.
				return;//프로그램 종료
			}
		}
		System.out.println(0);//범위를 모두돌아도 찾지 못하면 0을 출력
	}
	
}
반응형