매일 BOJ
(매일 BOJ) Python 2231번 분해합
norepinephrine
2025. 3. 25. 21:58
📦 문제 요약
- 어떤 N수 있었는지,
N의 분해합 을 구하는 문제야. - 분해합 은 N을 두 부분으로 나누어서 그 합을 구하는 방식인데,
분리수의 각 자릿수의 합을 더한 값이 원래 N으로 돌아오면 그 수가 생성자 야. - 예를 들어 N = 216말하면,
N = 198은이 1 + 9 + 8 + 198 = 216되어 198이 생성이 스스로 될 수 있습니다.
💡 아이디어(접근법만!)
- N에서 모든 것을 보유할 수 있음(최대 생성자를 N - 9 * len(N)시작)
- 각 수에 대해 sum(각 자릿수)더한 값을 구하고, N과 일치하면 생성자 임
- 최소값부터 탐색하기 때문에 가장 작은 생성자 를 찾을 수 있습니다.
<1차 접근 - 문제를 대충 읽어서 가장 큰 생성자를 찾는 프로그램 작성 & 생성자 없는 경우 고려 x>
N = int(input())
num = list(str(N))
result = N
backup = N
for i in range(9*len(num)):
result -= 1
backup -= 1
result_list = list(str(result))
for o in range(len(result_list)):
result += int(result_list[o])
if result == N:
break
else:
result = backup
print(backup)
<해결>
N = int(input())
backup = max(1, N - 9 * len(str(N)))
for i in range(backup, N):
result = i + sum(map(int, str(i)))
if result == N:
print(i)
break
else:
print(0)