에라토스테네스의 체 알고리즘으로 분류된 문제이다.
하지만 C언어로 푼 다면 단순하게 자신만의 알고리즘으로도 풀이가 가능하다.
풀이
문제에서 정의한 셀프 넘버는 생성자가 없는 숫자를 뜻한다.
문제에서 제공된 함수 d(n)을 구현하고, 1부터 10000까지 반복하여 생성자가 존재하는 숫자에 대해서는 미리 체크한 뒤 체크되지 않은 수만 출력하는 알고리즘으로 문제에 접근하였다.
- C 정답 코드
#include <stdio.h>
int self_num(int num) {
int sum = num;
while (num != 0) {
sum += num % 10;
num /= 10;
}
return sum;
}
int main() {
int i = 1, tmp;
char arr[10001] = { 0, };
for (; i < 10001; i++) {
tmp = self_num(i);
if (tmp < 10001)
arr[tmp] = 1;
}
for (i = 1; i < 10001; i++) {
if (!arr[i])
printf("%d\n", i);
}
return 0;
}
- Python 정답 코드
def self_num(num):
s = num
while num != 0:
s += num % 10
num //= 10
return s
arr = [True for i in range(1,11000)]
for i in range(1,10000):
arr[self_num(i)] = False
for i in range(1,10000):
if arr[i] : print(i)
결과 인증
사실 에라토스테네스의 체 알고리즘을 적용하여 풀어봤는데 위 코드들 보다 시간이 오래 걸려서 아직 제출하지 못했다.
글을 마무리하고 좀더 깊게 공부하러 가봐야겠다.
'Computer_Language > Algorithm' 카테고리의 다른 글
[백준] 11003번 최솟값 찾기 Python 해설 (0) | 2019.11.18 |
---|---|
[백준] 10868번 최솟값 Python 해설 (0) | 2019.11.18 |
[백준] 17618번 신기한 수 파이썬 해설 (Python) (0) | 2019.10.28 |
[백준] 1652번 누울 자리를 찾아라 파이썬 해설 (Python) (0) | 2019.10.26 |
[백준] 11403번 경로 찾기 파이썬 해설 (Python) (0) | 2019.10.25 |