본문 바로가기
Python

[파이썬] 백준 2231번 분해합 문제 풀이 python

by 아임코딩 2024. 2. 6.
728x90
반응형

문제 설명

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

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

 

문제 링크

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 = int(input())	#N 입력

ans = 0	#정답 숫자

for i in range(N-63, N):	#생성자의 최소값은 N - N의 자릿수 * 9 이다.
    tmp = i	
    num = i
    while num > 0:	#분해합 구하기
        tmp += num % 10
        num = num // 10
    if tmp == N:	#생성자인지 검사 맞으면 반복문 종료
        ans = i
        break
print(ans)

 

프로그램 코드 설명

문제에서 N의 범위는 1 <= N <= 1,000,000 이다.

따라서 생성자의 최소값은 N - 63이 된다.

왜냐하면 각 자리 숫자의 최대값은 9이기 때문에

어떤 숫자를 분해합을 했을 때 최대값은 999 이렇게 9로만 숫자가 이루어져 있을 때이기 때문이다.

이를 이용해서 반복문은 N - 63부터 N까지만 진행해주면 된다.

반복문 안에서는 분해합을 구하고 그 값이 생성자인지 비교를 하면 된다.

728x90
반응형