매일 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)