[문제]

https://www.acmicpc.net/problem/2231

 

2231번: 분해합

어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이

www.acmicpc.net

 


[풀이]

분해합은 n과 n을 이루는 각 자릿수의 합을 구해야 하는데 N을 이루는 각 자릿수의 합을 구하는 부분을 브루스 포스 알고리즘으로 풀어야겠다고 생각했다.

 

1부터 n+1까지 반복문을 돈다. str함수를 통해 i를 자리수마다 쪼개 리스트 A에 넣는다.

숫자 전체인 i와 자리수의 합인 sum(A)를 더해 res 변수에 넣는다.

만약 res가 n과 같다면 i값을 출력하고 break문을 통해 반복문을 탈출한다.

만약 i가 n일 때 까지 반복문에서 탈출하지 못했다면 생성자가 없는 경우이기 때문에 "0"을 출력한다.

 

이번 문제의 핵심은 아래 부분인 것 같다.

A = list(map(int, str(i)))

 


[코드]

import sys

if __name__ == '__main__':
    n = int(sys.stdin.readline())
    for i in range(1, n+1):
        A = list(map(int, str(i)))
        res = i + sum(A)
        if res == n:
            print(i)
            break
        if i == n:
            print(0)