알고리즘/Baekjoon

[백준][python] 4673번: 셀프 넘버

팽팽 2022. 7. 27. 15:01

https://www.acmicpc.net/problem/4673

 

4673번: 셀프 넘버

셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때,

www.acmicpc.net

 

규칙을 알아낼려고 방정식을 계속 세워봤지만 해결이 안됐음..

set 집합형으로 문제를 푸는 방식이 있었다.

전체숫자 1~10000까지 미리 정의하고 생성자 있는 수를 차집합으로 빼는 방법이다.

그리고 각 자리 숫자를 더할때 나눗셈, 나머지 연산자가 아니라 각 자리 숫자를 문자열로 나누어서 그걸 다시 숫자로 바꾸어서 더하는 방식이다.

natural_num = set(range(1,10001))
generated_num = set()

for i in natural_num:
    for j in str(i):
        i += int(j)
    generated_num.add(i)

self_num = sorted(natural_num - generated_num)
for i in self_num:
    print(i)