예를 들어 123으로 시작한다면
다음 수는 123 + 1 + 2 + 3 = 129이고, 다음 수는 129 + 1 + 2 + 9 = 141이다.
현재 숫자와 각 자리수(일의 자리, 십의 자리, ...)의 합을 구하면 된다.
1234의 경우
일의 자리 = 1234%10 = 4
십의 자리 = (1234/10)%10 = 3
백의 자리 = (1234/100)%10 = 2
천의 자리 = 1234/1000 = 1
문제에서 10000보다 작거나 같은 셀프 넘버라고 했으니 각 자리 수를 구할 때 천의 자리까지만 고려해도 된다.
10001개의 배열을 만들어 인덱스에 해당하는 수의 셀프 넘버를 저장한다.
현재 숫자의 셀프 넘버 총합이 10000이 넘어가면 출력하지 않아도 되므로 -1로 저장한다.
public class Main {
public static void main(String[] args) {
int arr[] = new int[10001];
int sum=0;
for(int i=1; i<=10000; i++) {
sum = i + i/1000 + (i/100)%10 + (i/10)%10 + i%10;
if(sum <= 10000)
arr[sum] = -1;
}
for(int i=1; i<=10000; i++) {
if(arr[i] != -1) {
System.out.println((i));
}
}
}
}
[출처]
https://www.acmicpc.net/problem/4673
'CODING > BAEKJOON' 카테고리의 다른 글
[BAEKJOON] 2523 별 찍기 - 13 (0) | 2022.01.26 |
---|---|
[BAEKJOON] 1065번 한수 (0) | 2022.01.26 |
[BAEKJOON] 1145번 적어도 대부분의 배수 (0) | 2022.01.26 |
[BAEKJOON] 2615번 오목 (0) | 2022.01.25 |
[BAEKJOON] 1110번 더하기 사이클 (0) | 2022.01.24 |
댓글