본문 바로가기
프로그래밍/Baekjoon

(파이썬) 백준 알고리즘 4673번 셀프 넘버

by J_Remind 2019. 1. 14.

문제

풀이 (Python)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def self_num(x):
    a = int(x)
    if a > 10000:
        return
    else:
        for j in range(len(x)):
            a += int(x[j])
            if a > 10000:
                return
        check[a] = True
        self_num(str(a))
            
check = [False]*10001
 
for i in range(110000):
    self_num(str(i))
    
for i in range(110000):
    if check[i] ==False:
        print(i)
 
cs
1 ~ 11 : 셀프 넘버가 아니면 해당하는 값의 check 인덱스에 True 값을 주는 함수이다.
3 ~ 4 : 10000보다 작거나 같은 수를 구하기 때문에 10000보다 크면 return 한다.
6 ~ 9 : d(n)을 구하는 식이며 10000보다 크면 필요 없기 때문에 return한다.
10 : 생성자가 있기 때문에 check의 a 인덱스에 True를 준다.
11 : d(d(n))을 만들기 위해 재귀 함수를 사용한다.

문제 출처