코딩테스트/[JAVA] 백준
[백준 | 2231번] 분해합
냠냠쿠
2023. 8. 16. 21:34
728x90
📝 나의풀이
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
int result =0;
for(int i=0; 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.println(result);
}
}
- 한가지 착각을 하는 바람에 많이 애먹었다..
단순히 '분해합'을 계산했었는데 생성자가 여러개 있는 자연수를 생각 하지 못했다.
예를들어 , 245의 경우 분해합이 256 (=245 + 2+ 4+ 5) 한 개이지만,
216의 경우 생성자가 198이 될 수도 있고 207이 될 수도 있다.
이 경우 최솟값인 198이 답이 된다. - 그래서 if문으로 sum+1 ==N인경우 (i값과 각 자릿수의 누계가 같은 경우) break문으로 for문을 종료하면된다.
728x90