[백준] 4673번: 셀프 넘버

박정훈·2022년 1월 30일
0

코테 문제 모음

목록 보기
3/34

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

양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다.

예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다.
이런식으로 다음과 같은 수열을 만들 수 있다.

33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ...

arr = [0] * 10100

for i in range(1, 10001):
    num = i
    total = i
    if(arr[i] != 1):
      while 1:
        while(num > 0):          
          total += num % 10
          num = num // 10
        arr[total] = 1
        if(total >= 10000): break
        num = total
for i in range(1, 10000):
    if(arr[i] != 1): print(i)

i 가 2일 때 4, 8, 16... 쭉 만들어서 arr을 1로 채우고, 10이라면 10 + 1 + 0 해서 11, 11 + 1 + 1 해서 13, 13 + 1 + 3 해서 17... 또 쭉 만들어서 arr을 1로 채운다. 그리고 마지막에 1이 아닌거로 출력 해 줬다.

profile
그냥 개인적으로 공부한 글들에 불과

0개의 댓글