[백준] 분해합 2231번 - Python

GoshK·2022년 2월 3일
0

[백준] Python

목록 보기
4/27
post-thumbnail

[백준] 분해합 2231번

나의 풀이

N = int(input())
start = N - (len(str(N)) * 9)
answer = 0
for i in range(start, N):
    if i < 1:
        continue

    _sum = num = i
    while num != 0:
        _sum += num % 10
        num //= 10
    if _sum == N:
        answer = i
        break
print(answer)
  • N의 분해합을 구하기 위해서 N의 값을 입력받는다.
  • 각 자리수가 9일때 자리수의 합이 최대가 되기 때문에, 1부터 탐색할 필요 없이, N에서 N의 자리수만큼 9를 곱하여 뺀 수부터 N 전까지 탐색을 시작한다.
  • 여기서 N의 범위는 1부터 1000000까지이다. 때문에 탐색할 숫자가 음수라면 분해합의 결과가 양수가 될 수 없기 때문에 계산하지않고 스킵한다.
  • 탐색할 숫자가 양수라면, 각 자리수를 더하고, 분해합의 결과가 N이 되는 숫자라면, answer 의 값을 바꿔주고, 반복을 종료한다.

0개의 댓글