나의 풀이
def generator(n):
return int(n) + sum([int(i) for i in str(n)])
for i in range(n:=int(input())):
if n == generator(i):
print(i)
break
else:
print(0)
고수의 풀이
N=int(input())
r=0
for i in range(max(0, N-100), N):
if sum(map(int,list(str(i))))+i==N:r=i;break
print(r)
CODE REVIEW
- for문 안에서 체크하고 만약 break로 빠져나오는 것이 없으면 else로 넘어가 0을 프린트한다.
- 고수의 풀이도 논리는 동일하다.
- 내 코드에서는 else로 예외 처리 해주었지만, ans=0으로 지정해주고 print(ans)를 for문 밖으로 꺼내도 되었다.
- 3자리가 넘어가게 되면 작은 숫자들로는 애초에 생성자로 불가능하다. 따라서 range(max(0, n-100), n)와 같이 범위 설정해지면 불필요한 연산을 줄일 수 있다.
내 코드 수정…
def generator(n):
return int(n) + sum([int(i) for i in str(n)])
ans=0
for i in range(n:=int(input())):
if n == generator(i):
ans = i
break
print(0)