상세 컨텐츠

본문 제목

[백준] 2231 분해합 (Baekjoon Problem 2231: Sum of Decomposed Numbers)

파이썬

by 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)

관련글 더보기

댓글 영역