[백준Java]BOJ4673_셀프 넘버
<출처 : https://www.acmicpc.net/problem/4673 >
이 문제를 처음에 읽었을 때는 무한 수열이라는 키워드를 보고 돌고 돌아서 다시 원래의 수로 돌아와야 하는.. 그런 문제인 줄 알았는데 제대로 읽고 보니 생각보다 간단한 문제였다..
풀이 방법
- 셀프넘버인지 체크하는 배열을 10000칸 만들고 1부터 10000까지 루프를 돌면서 d(n)을 구하고 어떤 숫자의 생성자가 되는 지를 확인하면 된다.- 문제의 예시 중 1,3,5,7,9는 생성자가 없는 숫자니까 2,4,6..은 생성자가 있는 숫자인데 2를 예로 들면 1 (본인) + 1(각 자리의 수) = 2가 되니까 2는 생성자가 있는 숫자가 되어서 답에서 빠지게 된다.
- 더 효율적인 풀이는 System.out.println 말고 StringBuilder를 사용하는 것 같다..
코드
public static void main(String[] args) throws Exception {
int[] arr = new int[10001];
for (int i = 1; i <= 10000; i++) {
int num = i;
int sum = num;
while (num != 0) {
sum += (num % 10);
num /= 10;
}
if (sum <= 10000)
arr[sum] = 1;
}
for (int i = 1; i <= 10000; i++) {
if (arr[i] == 0)
System.out.println(i);
}
}
Author And Source
이 문제에 관하여([백준Java]BOJ4673_셀프 넘버), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@zezs3535/백준JavaBOJ4673셀프-넘버저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)