2231 | 분해합
https://www.acmicpc.net/problem/2231
N = int(input())
ex = False
for i in range(1, N+1):
indiv = []
indiv.append(i)
i = str(i)
for j in i:
indiv.append(int(j))
if sum(indiv) == N:
print(i)
ex = True
break
if ex == False:
print(0)
N = int(input())
tag = False
for i in range(1, N+1):
if i + sum(map(int, list(str(i)))) == N:
print(i)
tag = True
break
if not tag:
print(0)
N: int = int(input())
tag: bool = False
# 각 자리에서 가질 수 있는 가장 큰 값은 9
# 수 + 수의 각 자리 합 = 분해합이므로
# 가장 작은 수(범위를 지정할)는 분해합 - 수의 각 자리 합의 최대값
# 즉 N-9*6
for i in range(max(1, N-54), N+1):
if i + sum(map(int, list(str(i)))) == N:
print(i)
tag = True
break
# i == N
# -> 끝까지 갔다는 것, 즉 분해합이 존재하지 않음
elif i == N:
print(0)
조건을 잘 생각해보면 별다른 변수 없이 풀 수 있는 문제였음
for 문 안에서 조건문 2개 돌리는 것보다 bool 형 변수 하나 선언하는 게 더 효율적일 것 같음
범위를 지정할 때 시작 값을 max(1, N-54)로 지정한 것이 시간을 약 20배 단축 시켰음
최대한 검색할 범위를 좁히되 모든 선택지를 포함할 수 있게끔 해야함