[백준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);
		}
	}

좋은 웹페이지 즐겨찾기