본문 바로가기

백준 문제풀이/브루트포스

백준 2231 Python / 분해합 / 브론즈2

안녕하세요.

이번 문제는 백준 2231 분해합 문제입니다.

파이썬으로 풀어보겠습니다.

 

링크는 다음과 같습니다.

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

 

2231번: 분해합

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

www.acmicpc.net

 


풀이

 

분해합을 구하기 위해서는, 숫자 + 숫자 각 자리 수의 합 을 구하면 됩니다.

파이썬을 이용하면, 숫자를 문자열로 변환 후, map 함수를 이용해서 한 글자씩 int로 바꿔준다면 간단하게 구할 수 있습니다.

1부터 시작해서 주어진 숫자가 될 때까지 반복문을 돌리고, 그 숫자로 생성자를 구할 수 있으면 멈추면 되겠습니다. (최솟값)

 

코드로는 이렇게 되겠네요.

import sys

def sum_digit(n):
    return sum(map(int, str(n))) # 각 자리수의 합 반환
    
N = int(sys.stdin.readline())
answer = N
for i in range(1, N):
    if (i + sum_digit(i)) == N:
        if answer > i:
            answer = i
if answer == N:
    answer = 0
print(answer)

 

감사합니다.