Cute Running Puppy

algorithm/[python] baekjoon

[python] 백준 4673_셀프 넘버

R.silver 2021. 6. 25. 20:26
반응형

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

 

풀이 1.

num_list = list(range(10001))
for n in range(10001):
    num = n \
          + n // 10000 \
          + (n % 10000) // 1000 \
          + ((n % 10000) % 1000) // 100 \
          + (((n % 10000) % 1000) % 100) // 10 \
          + (((n % 10000) % 1000) % 100) % 10
    if num in num_list:
        num_list.remove(num)

for i in range(len(num_list)):
    print(num_list[i])

 

0부터 10000까지 들어 있는 num_list 리스트를 만든 뒤 

10000까지 for 문을 돌며

(n + 각자리 수) 의 결과를 num에 저장

num_list에서 num을 제거

 

각 자리수의 합을 구하는 부분을 간단하게 변경할 수 있다.

 

#num = n의 각 자리수를 더한 값 
for i in range(1, 6):
    num += (n % (10 ** i)) // 10 ** (i - 1)

 

 

 


풀이 2. 

num_list = list(range(10001))

for i in range(10001):
    result = i
    for j in str(i):
        result += int(j)
    if result in num_list:
        num_list.remove(result)

for i in range(len(num_list)):
    print(num_list[i])

 

10000까지 for 문을 돌며 str형으로 변경한 뒤

각 자리수를 더하기 위해 int 형으로 변경 -> 각 자리수를 더할 수 있다

그 후 1 부터 10000까지 만들어 놓았던 리스트에서 result를 제거

반응형