파이썬
[백준] 2231 분해합 (Baekjoon Problem 2231: Sum of Decomposed Numbers)
Riella
2023. 8. 16. 16:10
728x90
문제 출처
[문제 요약]
분해합이란 어떤 자연수 N이 있으면 N의 각 자릿수와 N을 더한 값이다.
ex) 어떤 자연수 N이 245라고 하면, N의 분해합은 2+4+5+245 = 256
수식으로 나타내면 N(분해합) = M(생성자) + int(str(M)[0]) + … + int(str(M)[len(M-1)]),
간단하게 아래처럼 된다.
생성자란 분해합을 만드는 수이다. 위에서 말하던 어떤 자연수 N이 생성자다.
생성자는 여러개가 있기도, 없기도 한데
분해합이 입력으로 들어오면 가장 작은 생성자를 출력하는게 목표이다.
생성자가 없으면 0을 출력한다.
[풀이]
분해합은 생성자의 각 자릿수와 생성자를 더하기 때문에 생성자보다 크다.
이 점을 이용해 분해합을 구하는 함수를 간단히 만든다음 룹을 생성자 - 1 만큼 돌리며 하나씩 계산해준다.
[유의할 점]
코드에는 0도 계산하는데 이건 빼도 된다.
[파이썬 3 코드]
# -*- coding: utf-8 -*-
from sys import stdin
def decomp_sum(n: int):
strnum = str(n)
strsum = 0
for i in range(len(strnum)):
strsum += int(strnum[i])
return strsum + n
if __name__ == "__main__":
dsum = int(stdin.readline()) # output의 분해합
m = 0
for i in range(dsum):
if decomp_sum(i) == dsum:
m = i
break
print(m)