본문 바로가기
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. 가장 작은 생성자를 구하라고 했으므로 1부터 N까지의 자연수를 살펴보고, 생성자가 존재하면 for문에서 빠져나오는 방식으로 구성한다. 사실 N까지 안 봐도 될 것 같지만 일단 한다….
  2. 자릿수를 나누기 위해 살펴보는 숫자를 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

개발자 연습생