공부함
알고리즘 문제풀이 - 백준#2231번: 분해합 본문
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을 받아서
-1을 하면서 분해합에 맞는 수를 찾기..
라는 방법은 다들 떠올렸을테고
이걸 더 효율적으로 구하는 법:
수가 얼마가 됐든
각 자리의 최대는 9다
216의 분해합을 구해도 9+9+9.. 27을 넘지 않고
216524의 분해합을 구해도 9+9+9+9+9+9... 54를 넘지 않을 것.
그러니까 처음에 받은 수 n에서
n의 자릿수 * 9를 한만큼 빼고
그 수에서 n까지 비교하면 더 짧은 시간내에 답을 구할 수 있다.
예) 216이면 216-27을 하고 189에서 216까지 비교한다.
import java.util.Scanner;
public class decompose_2231 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int length = (int) (Math.log10(n) + 1);
int result=0;
for (int i =(n-(length * 9)); i <n; i++) {
int number = i;
int sum = 0;
while (number != 0) {
sum += number % 10;
number /= 10;
}
if (sum + i == n) {
result=i;
break;
}
}
System.out.print(result);
}
}
'알고리즘 > 백준' 카테고리의 다른 글
알고리즘 문제 풀이 - #2751번: 수 정렬하기 2(JAVA) (0) | 2022.08.02 |
---|---|
알고리즘 문제 풀이 - 백준 #2869번: 달팽이는 올라가고 싶다 (JAVA) (0) | 2022.02.22 |
알고리즘 문제 풀어보기 - 백준 #1193번: 분수 찾기(JAVA) (0) | 2022.02.02 |
알고리즘 문제 풀어보기 - 백준 #2839번: 설탕 배달 (JAVA) (0) | 2022.01.17 |
알고리즘 문제 풀어보기 - 백준 #11497번: 통나무 건너뛰기 (JAVA) (0) | 2022.01.15 |