백준 2231번: 분해합

do_sensei_·2023년 9월 12일
0

백준_코딩문제

목록 보기
12/16

📚 백준 2231번: 분해합

📖 문제 개요

어떤 자연수 ( N )이 있을 때, 그 자연수 ( N )의 각 자릿수와 ( N ) 자체를 더한 값을 ( N )의 분해합이라고 합니다. 예를 들어, 245의 분해합은 256(=245+2+4+5)입니다. ( N )의 분해합이 주어졌을 때, ( N )을 구하는 문제입니다. 문제의 자세한 내용은 여기에서 확인하세요.

🎯 문제 핵심

이 문제의 핵심은 가능한 ( N )의 후보를 효과적으로 탐색하여 주어진 분해합을 만드는 ( N )을 찾는 것입니다.

✏️ 해결 방법

  1. 주어진 분해합에서 최대한 빼서 시작점(최소한의 ( N ))을 결정합니다.
  2. 시작점부터 주어진 분해합까지 반복하면서 각 숫자와 그 숫자의 각 자릿수의 합이 주어진 분해합과 같은지 확인합니다.
  3. 같다면 그 숫자를 출력하고 반복문을 종료합니다.
  4. 모든 숫자를 탐색했는데도 결과를 찾지 못했다면 0을 출력합니다.

📝 코드 설명

import sys
input = sys.stdin.readline

n = int(input())

# 최소 시작점 계산: 가장 큰 자릿수의 최대값은 9이므로, n에서 자릿수 * 9를 뺀 값이 시작점이 됩니다.
start = n - 9 * len(str(n))
if start < 1:
    start = 1

for i in range(start, n):
    # 각 숫자의 자릿수의 합을 구합니다.
    if i + sum(map(int, str(i))) == n:
        print(i)
        break
else:  # for-else 구문 사용: for문이 중간에 break 되지 않고 전체를 순회한 경우 else문이 실행됩니다.
    print(0)

🚀 실행 방법

위의 코드를 복사하고 Python 환경에서 실행하세요. sys.stdin.readline()은 입력을 빠르게 받기 위한 함수입니다.

0개의 댓글