정답이긴 하지만 시간을 너무 많이 소비했다.. 완전 탐색 문제라 시간이 널널하게 주었지만 그럼에도 너무 많이 낭비되었다. 완전탐색이어도 더 보기 쉽고 짜임새 있게 구현하는 것이 중요하다는 것을 다시 깨달았다!
n=input()
l=len(n)
i=1
n=int(n)
while n!=i:
res=[]
i=str(i)
x=len(i)
for k in range(x):
res.append(int(i[k]))
i=int(i)
res.append(i)
if sum(res) == n:
print(i)
break
i+=1
if(n==i):
print(0)
내가 풀고자 접근했던 방식과 비슷하다.
이렇게 작성했으면 좀 더 빠른 시간에 풀렸을 것이다.
n = int(input()) # 분해합을 입력값으로 받음
for i in range(1, n+1): # 해당 분해합의 생성자 찾기
num = sum((map(int, str(i)))) # i의 각 자릿수를 더함
num_sum = i + num # 분해합 = 생성자 + 각 자릿수의 합
# i가 작은 수부터 차례로 들어가므로 처음으로 분해합과 입력값이 같을때가 가장 작은 생성자를 가짐
if num_sum == n:
print(i)
break
if i == n: # 생성자 i와 입력값이 같다는 것은 생성자가 없다는 뜻
print(0)
가장 빠른 속도로 풀리는 코드이다.
왜 이렇게 작성했는지는 이해하지 못했다.ㅠㅠ 시간이 지나면 이해하는 날이 다가오길...
N=input()
k=len(N)
N=int(N)
if N>=9*k:
for i in range(N-9*k,N+1):
n = i
p = str(i)
for j in range(0, len(p)):
n += int(p[j])
if n==N:
print(i)
quit()
else:
for i in range(0,N+1):
n = i
p = str(i)
for j in range(0, len(p)):
n += int(p[j])
if n==N:
print(i)
quit()
print(0)