문제바로가기> 백준 2331번: 분해합
브루트포스 알고리즘을 이용하여 풀었다.
(브루트 포스 알고리즘이란 무식하게 다 해보는 방법이다. 모든 경우의 수를 탐색한다.)
n = input()
ans = 0
for i in range(int(n)):
tmp = i
for j in range(len(str(i))):
tmp+=int(str(i)[j])
if tmp==int(n):
ans = i
break
print(ans)
그리고 이제 문제를 풀고 나서 나보다 더 좋게 푼 사람의 풀이를 보는 시간도 가져보려고 한다. 그래야 더 발전할 수 있을 것 같다!
for j in range(len(str(i))): tmp+=int(str(i)[j])위 코드를 아래와 같이도 표현할 수 있다.
sum(map(int,str(i)))+i
1,000,000이하의 숫자에서 999,999인 경우가 모든 자리수의 합이 가장 큰 경우이기 때문에 범위도 아래와 같이 설정할 수 있다. 이렇게 하면 시간도 많이 단축할 수 있다.
for i in range(max(1, n-54),n)