hahn

단계별로 풀어보기(브루트 포스 - 분해합) 본문

코딩테스트 연습/백준(JAVA)

단계별로 풀어보기(브루트 포스 - 분해합)

hahn 2021. 8. 31. 18:41
728x90
반응형

2231번: 분해합 (acmicpc.net)

 

2231번: 분해합

어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이

www.acmicpc.net

http://boj.kr/5b7999deb41c43c7849846ab603d78ab

 

공유 소스 보기

 

www.acmicpc.net

더보기
import java.util.Scanner;

class Main{
    
    public static void main(String[] args){
        
        Scanner sc = new Scanner(System.in);
		
		int input, start, compare, result;
		
		input = sc.nextInt();
		
		start = input - 9 * ((int) Math.log10(input) + 1);
		
		for(int i = start; i < input; i++) {
			
			compare = i;
			result = i;
			
			for(int j = (int) (Math.log10(input)); j > -1; j--) {
				
				result += (int) (compare / Math.pow(10, j));
				
				compare %= Math.pow(10, j);
				
			}
			
			if(input == result) {
				
				System.out.println(i);
				break;
				
			}
            
			if(i + 1 == input) System.out.println("0");		
            
		}
        
    }
    
}

시작 부분을 어떻게 구할까 생각하다가

 

본인 가지고 있는 자릿수에 9를 곱한 값을 빼주고

 

거기부터 시작하게 했다.

 

출력되어야 하는 값에 i를 더해주고

 

Math.pow 이용하여 몫과 나머지를 이용해서 각 자리의 수를 더해줬다.

 

0 출력은 그냥 for문 끝나기 직전에 출력되게 해 놨다.

(break문을 안 만났다는 의미)

728x90
반응형