728x90
(2231) 분해합
문제 🌐
어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256 (=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다.
자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오.
입력
첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다.
출력
첫째 줄에 답을 출력한다. 생성자가 없는 경우에는 0을 출력한다.
접근 방법
문제 자체는 어렵지 않았는데 이해하려고 몇 번을 읽었는지 모르겠음….
- 가장 작은 생성자를 구하라고 했으므로 1부터 N까지의 자연수를 살펴보고, 생성자가 존재하면 for문에서 빠져나오는 방식으로 구성한다. 사실 N까지 안 봐도 될 것 같지만 일단 한다….
- 자릿수를 나누기 위해 살펴보는 숫자를 str로 바꾸고 한 자리씩 쪼갠 후 합을 구한다. → 유감스럽게도 나누기 연산자랑 나머지 연산자로 한 자리씩 분리할 생각을 5초 정도 했다.
Full Solution
n = int(input())
for m in range(1, n+1):
x = m + sum(map(int, str(m))
if x == n:
print(m)
break
else:
print(0)
728x90
'알고리즘 문제 > 백준' 카테고리의 다른 글
11866 요세푸스 문제 (python) (0) | 2023.07.13 |
---|---|
17204 죽음의 게임 (python) (0) | 2023.04.23 |
1436 영화감독 숌 (python) (0) | 2023.04.20 |
2798 블랙잭 (python) (2) | 2023.04.18 |
2839 설탕 배달 (python) (0) | 2023.03.29 |