[백준] 2231번(분해합)

·2023년 4월 25일

백준 문제풀이

목록 보기
50/159

백준 2231번


최종 제출 코드


m = int(input())
# 각 자리수를 리스트화
arr = list(str(m))
# 각 자리수의 최대값은 9. 따라서 생성자가 될 수 있는 가장 작은 수는 m - m의 자리수*9
start_num = m - len(arr)*9
# 만약 start_num이 0이하의 값이 되면 1부터 검사
if start_num < 1:
  start_num = 1
  
result = 0

for i in range(start_num, m):
  # i의 각 자리수의 값을 리스트화
  arr = list(map(int, str(i)))
  # i의 각 자리수의 합
  nums = sum(arr)
  # 만약 i의 각 자리수의 합과 i 자체를 더한 값이 m(입력값)과 일치하면
  # 그 i 값이 가장 작은 생성자이다
  if i + nums == m:
    result = i
    break

print(result)

◼ 각자리의 최고 수는 9

  • 즉, for문의 실행 수를 줄이고 싶으면 n자리수 mm - n*9 가 생성자인지부터 검사하면 됨
  • m - n*9 <= 0 인 경우는 1부터 검사해준다
profile
백엔드 개발자가 되고 싶어요(22.8.15~)

0개의 댓글