본문 바로가기
알고리즘/구현

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

by 성현0409 2022. 2. 17.

문제

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

풀이

 

def d(n):
    a = n 

    while True:
        b = n%10
        a += b
        n = n//10
        if n<10:
            a += n
            break

    return a

nums = []

for i in range(1,10000):
    n = d(i)
    nums.append(n)


for i in range(1, 10000):
    if i not in nums:
        print(i)

d라는 함수를 만들어서 나오는 모든 숫자들을 nums라는 리스트에 저장해주고

nums이라는 리스트에 포함되어 있지 않은 숫자들(생성자가 없는 숫자들)을 출력해주면 된다.

 

def d(n):
    a = n
    while True:
        b = n%10
        a += b
        n = n//10
        if n<10:
            a += n
            break
    return a

nums = set([ _ for _ in range(1, 10001)])
nums2 = set()
for i in range(1,10000):
    n = d(i)
    nums2.add(n)

nums = nums - nums2

for i in sorted(nums):
    print(i)

집합을 이용한 풀이

리스트를 집합으로 생성하여 차집합으로 구할 수도 있다.