JAVA/Coding Test

[JAVA] 백준 2231 분해합_브루트포스

오늘도개발 2023. 2. 28. 15:57

 

https://www.acmicpc.net/problem/2231

 

2231번: 분해합

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

www.acmicpc.net

 

접근 :

 

- 입력받은 n 보다 작은 수 중 특정수(i)와 특정수의 각자리수를 더한 값이 n 과 같은 수 찾기

 

- i 가 여러개 일 경우 작은 수 출력( 작은 순서부터 큰 순서대로 계산 후 최초 i 발견 시 결과값 출력)

 

- ex> n = 256 인 경우 i = 245  (245+2+4+5 = 256)

 

- 끝까지 계산 후 조건을 만족하는 i 가 없는 경우 0 출력

 

- i는 n/2 이상이다. i 의 각자리 수 합을 해도 i 의 절반을 넘을 수 없음

 

  (i 가 1자리 수 일때, 각 자리 수 합 = 자기 자신이므로  i + i (각자리수) = n 이다.)

 

 

 

코드 구현 :

 

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());
		String temp_num = "";
		int temp_sum = 0;
		int result = 0;
		
		for (int i = n / 2; i < n; i++) {
			temp_num = Integer.toString(i);
			temp_sum = 0;
			
			// temp_sum 은 i 의 각 자리 수를 더한 값
			for (int j = 0; j < temp_num.length(); j++) {
				temp_sum += temp_num.charAt(j) - '0';
			}
			
			// i의 각 자리수를 더한 값과 i를 더한 값이 n과 같으면 break
			if ((i + temp_sum) == n) {
				result = i;
				break;
			}
		}

		// 결과 화면출력
		System.out.println(result);
		br.close();
	}
}