티스토리 뷰
📌문제
어떤 자연수 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)
'코딩테스트' 카테고리의 다른 글
[백준/파이썬] 2798 블랙잭 (0) | 2025.01.24 |
---|---|
[백준/파이썬] 5073 삼각형과 세 변 (0) | 2025.01.23 |
[백준/파이썬] 9063 대지 (0) | 2025.01.22 |
[백준/파이썬] 10101 삼각형 외우기 (0) | 2025.01.22 |
[백준/파이썬] 1085 직사각형에서 탈출 (0) | 2025.01.21 |