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
입출력 예시
프로그램 코드
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
반응형
'프로그래밍 > Python' 카테고리의 다른 글
[파이썬] 백준 2609번 최대공약수와 최소공배수 문제 풀이 python (0) | 2024.02.06 |
---|---|
[파이썬] 백준 2292번 벌집 문제 풀이 python (0) | 2024.02.06 |
[파이썬] 백준 2164번 카드2 문제 풀이 python (1) | 2024.02.06 |
[파이썬] 백준 2108번 통계학 문제 풀이 python (0) | 2024.02.05 |
[파이썬] 백준 1978번 소수 찾기 문제 풀이 (0) | 2024.02.05 |