Algorithm Study/Python

[백준 파이썬] # 4673 셀프 넘버

728x90
반응형

Silver V

# 4673 셀프 넘버

링크 : 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):
    text = str(n)
    if len(text) == 1:
        t = int(text[0]) + int(text[0]) 

    if len(text) == 2:
        t = int(text[0]) + int(text[1]) + int(text)

    if len(text) == 3:
        t = int(text[0]) + int(text[1]) + int(text[2]) + int(text)

    if len(text) == 4:
        t = int(text[0]) + int(text[1]) + int(text[2]) + int(text[3]) + int(text)

       # len(text) == 5인 경우는 이미 결과값을 벗어났으므로 조건문에서 제외했다 
    if t < 10000:
        li[t] = t

# 저장 공간 리스트 만들기    
li = [False] * 10000

# d(i)값 li에 저장
for i in range(10000):
    d(i)

# 원하는 값 출력(li에 포함되어 있지 않은 수)    
for i in range(1, 10000):
    if li[i] == False:
        print(i)

 

후기

  • 몇번 시도하려 했었는데 지레 겁먹고 도전을 못해왔다. n의 자리수가 1~5일 경우에 대해서만 생각해주면 되기 때문에 처음 예상한 것 보다는 쉽게 풀이할 수 있었다.