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
'코딩테스트 > [JAVA] 백준' 카테고리의 다른 글
[ 백준 | JAVA | 24262번 ] 색종이 (0) | 2023.10.16 |
---|---|
[백준 | 24262번] 알고리즘 수업 - 알고리즘의 수행 시간 1 (0) | 2023.08.16 |
[백준 | 1316번] 그룹 단어 체커 (0) | 2023.08.16 |
[백준 | 3009번] 네 번째 점 (0) | 2023.08.16 |
[백준 | 11653번] 소인수분해 (0) | 2023.08.16 |