알고리즘 분류 브루트포스
🔗 문제 출처 https://www.acmicpc.net/problem/2231
이 문제의 알고리즘 분류는 브루트포스이다. 브루트포스 알고리즘의 특성상 모든 경우의 수를 돌기 때문에 결과적으로는 정확한 해답을 찾을 수 있지만 시간이 오래걸린다는 단점이 있다.
이 문제 또한 for문으로 무작정 답을 찾을 때까지 경우의 수들을 순회한다.
n = int(input())
for i in range(1,n+1):
if (sum(list(map(int,str(i)))) + i) == n:
print(i)
break
if i == n:
print(0)
이 문제를 풀기 위해서는 숫자의 각 자리수를 효율적으로 더할 수 있어야했다. 그렇기 때문에 sum(list(map(int,str(i))))로 각 자리수를 더했다. i를 str로 감싼 이유는 map의 두 번째 파라미터에는 iterable한 요소를 전달해야 하기 때문이다. 따라서 string으로 변환해준다음 다시 int로 변환을 하여 list화시켰다.
이 값에 i를 더해서 그 값이 입력받은 n과 일치한다면 바로 출력하고 반복문을 빠져나왔다.
만약 끝까지 값을 찾지 못하다 마지막 인덱스인 i와 입력값인 n이 동일해진다면 생성자가 없는 것이기 때문에 0을 출력한다.