코드

이중 while문

n = int(input())

def _generateNum(n):
    # 생성자
    g = 0

    while True:
        # 각 자리 수의 합을 담을 변수
        tot = 0
        g += 1
        tmp = g
        
        # n과 g가 같아질 때까지 반복문이 돌았다 => 생성자가 없다
        if n == g:
            print('0')
            break
        
        # tot를 구할 반복문
        while True:
            tot += tmp % 10
            tmp = tmp // 10
            
            if tmp == 0:
                break
        
        if n == (g + tot):
            print(g)
            break
    
_generateNum(n)

for문

n = int(input())
tot = 0

for i in range(1, n+1):
    # i를 str 함수로 문자열로 변환 후 map 함수로 개별적으로 받고 list로 만들어줌
    # while 문에서 tot를 구한 반복문과 동일한 역할
    tot = list(map(int, str(i)))
    g_tot = i + sum(lst)
    
    if g_tot == n:
        print(i)
        break
    
    if i == n:
        print(0)

문제 해설

찾고자 하는 생성자를 담을 변수의 값이 n과 같아지는 경우 생성자가 없는 숫자라는 것을 파악하고 나면 쉽게 풀 수 있다.

각 자리 수의 합을 구하려다보니 반복문을 이중으로 구현하여 시간 복잡도 부분에서 별로 좋지 못한 느낌이 있어 for 문으로도 구현해보았다.

댓글남기기