티스토리 뷰

📌문제

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

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

 

📌풀이

분해합 n이 주어졌을 때 생성자를 구하는 문제

분해합 = 생성자 + 각 자리 수의 합

 

생성자는 입력된 분해합보다 작으므로 1부터 n까지 확인

str(i)로 입력된 숫자를 문자열로 바꿈 "256"

map(int, str(i))로 문자열 "256"에서 각 문자를 하나씩 꺼내어 int 적용 [2, 5, 6]

sum함수로 각 자리 수의 합을 구함

 

만약 i의 각 자리수의 합 + i 가 입력된 분해합 n과 같다면 i는 생성자이므로 출력

 

 

📌코드

n = int(input())

for i in range(1, n + 1):
    num = sum(map(int, str(i)))  # i의 각 자리수의 합
    if i + num == n:
        print(i)
        break
else:
    print(0)

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함