[백준] 분해합 2231번
나의 풀이
N = int(input())
start = N - (len(str(N)) * 9)
answer = 0
for i in range(start, N):
if i < 1:
continue
_sum = num = i
while num != 0:
_sum += num % 10
num //= 10
if _sum == N:
answer = i
break
print(answer)
- N의 분해합을 구하기 위해서 N의 값을 입력받는다.
- 각 자리수가 9일때 자리수의 합이 최대가 되기 때문에, 1부터 탐색할 필요 없이, N에서 N의 자리수만큼 9를 곱하여 뺀 수부터 N 전까지 탐색을 시작한다.
- 여기서 N의 범위는 1부터 1000000까지이다. 때문에 탐색할 숫자가 음수라면 분해합의 결과가 양수가 될 수 없기 때문에 계산하지않고 스킵한다.
- 탐색할 숫자가 양수라면, 각 자리수를 더하고, 분해합의 결과가 N이 되는 숫자라면, answer 의 값을 바꿔주고, 반복을 종료한다.