반응형

파이썬 / BOJ 백준 / 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

 

문제

어떤 자연수 N이 있을 때, 그 자연수 N분해합은 NN을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M분해합이 N인 경우, MN의 생성자라 한다. 예를 들어, 245분해합은 256(=245+2+4+5)이 된다. 따라서 245256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다.

자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오.

 

풀이

1. 이 문제는 루트포스 알고리즘으로 풀 수 있는 문제입니다. , 모든 경우의 수를 확인해야 합니다.

2. 1부터 N+1까지의 모든 경우의 수를 비교합니다.

3. For문의 istring으로 입력 받아, int 형으로 바꿔 각 자리의 수의 합을 구하고, i와 각 자리의 수의 합을 더 합니다.

4. 이 합이 입력한 값과 동일하면 For 문을 종료시키고 답을 출력합니다.

전체 코드

N = int(input())
result = 0

for i in range(1, N+1):        
    a = list(map(int, str(i)))  
    s = i + sum(a)              
    if(s == N):                 
        result = i                   
        break

print(result)
반응형

+ Recent posts