어떤 자연수 ( N )이 있을 때, 그 자연수 ( N )의 각 자릿수와 ( N ) 자체를 더한 값을 ( N )의 분해합이라고 합니다. 예를 들어, 245의 분해합은 256(=245+2+4+5)입니다. ( N )의 분해합이 주어졌을 때, ( N )을 구하는 문제입니다. 문제의 자세한 내용은 여기에서 확인하세요.
이 문제의 핵심은 가능한 ( N )의 후보를 효과적으로 탐색하여 주어진 분해합을 만드는 ( N )을 찾는 것입니다.
import sys
input = sys.stdin.readline
n = int(input())
# 최소 시작점 계산: 가장 큰 자릿수의 최대값은 9이므로, n에서 자릿수 * 9를 뺀 값이 시작점이 됩니다.
start = n - 9 * len(str(n))
if start < 1:
start = 1
for i in range(start, n):
# 각 숫자의 자릿수의 합을 구합니다.
if i + sum(map(int, str(i))) == n:
print(i)
break
else: # for-else 구문 사용: for문이 중간에 break 되지 않고 전체를 순회한 경우 else문이 실행됩니다.
print(0)
위의 코드를 복사하고 Python 환경에서 실행하세요. sys.stdin.readline()
은 입력을 빠르게 받기 위한 함수입니다.