백준 2331번: 분해합

danbibibi·2021년 9월 12일

문제

문제바로가기> 백준 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)
profile
블로그 이전) https://danbibibi.tistory.com

0개의 댓글