[백준] 2231번 : 분해합 (파이썬)

뚝딱이 공학도·2022년 3월 1일
0

문제풀이_백준

목록 보기
74/160



문제



나의 답안

n=int(input())
total=0

for i in range(1,n+1):
    arr=list(map(int,str(i)))
    total=i+sum(arr) #분해합=생성자+각 자리의 합
    if total==n: #분해합과 입력값이 같을 때
        print(i) #그 때의 생성자(가장 작음)
        break
    if i==n:    #생성자가 없는 경우
        print(0)
        break

접근 방법

  • 가장 작은 생성자를 구하는 문제이므로 자연수 1부터 입력받은 수(n)까지 반복문을 돌리면서, 생성자(i)를 구해준다.
  • 분해합이 입력값과 같을 때, 생성자가 없을 때 두 조건에 따라 출력해준다.
  1. 반복문에서 생성자 i에 대해, arr로 각 자리의 값을 저장한다.
  2. total변수는 분해합을 구하기 위한 변수이므로, 생성자와 각 자리의 합을 더해준다.
  3. 분해합과 입력값이 같다는 조건에서, 구한 생성자를 출력해준다. 가장 작은 값을 구하는 것이므로 조건을 최초로 만족하는 값이 최소값이 된다. 따라서 break로 반복문을 종료한다.
  4. 만약 생성자(i)와 입력받은 값이 같다면(n) 생성자가 없는 것이므로, 0을 출력해준다.

0개의 댓글