공부하기/백준

[Python] 백준 풀기 2231 - 분해합

XEV 2022. 10. 5. 20:16

파이썬 백준 2231번

브론즈2

https://www.acmicpc.net/problem/2231

 

2231번: 분해합

어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이

www.acmicpc.net

 

 

 

 

문제 보기

분류 브루트 포스

 

 

 

문제 풀기

어떻게 접근할까 생각해 보았으나 역시나 브루트 포스 분류답게 작은 수 1 부터 시작하여 만족하는 해당 조건이 나올때까지 숫자를 대입한다.

N = abc + a + b + c 를 만족하는 abc 가 나올때까지 숫자 abc 대입.

N_check = M + sum(map(int, str(M)))

int M 을 str 을 적용하여 각 문자로 분리하고 그 개별 문자화된 숫자를 다시 int 로 변환하여 sum() 과 M 의 합을 진행한다.

input 으로 들어온 N 과 계산 조건으로 밝혀진 N_check 값이 같으면 프린트.

제일 작은 수만 찾으면 되기때문에 이후 반복문은 필요없어 break 추가한다.

 

 

 

코드 보기

import sys
inputdata = sys.stdin.readline

N = int(inputdata().strip())

for M in range(1, N + 1):
    N_check = M + sum(map(int, str(M)))
    
    if N_check == N:
        print(M)
        break
    if M == N:
        print(0)



# 1026

# 999