📦 문제 요약
- 어떤 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)
'매일 BOJ' 카테고리의 다른 글
| (매일 BOJ) Python 1259번 팰린드롬수 (0) | 2025.03.30 |
|---|---|
| (매일 BOJ) Python 15829번 해싱 (0) | 2025.03.30 |
| (매일 BOJ) Python 1978번 소수 찾기 (0) | 2025.03.23 |
| (매일 BOJ) Python 30802번 웰컴 키트 (0) | 2025.03.23 |
| (매일 BOJ) Python 4153번 직각삼각형 (0) | 2025.03.23 |