알고리즘/백준

[파이썬] BOJ_2231(분해합)

딱따구르리 2023. 5. 23. 08:40
728x90
반응형

문제

 

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과 같아지는 때를 찾으면 된다.

 

생성자가 여러개인 경우 가장 작은 생성자만 찾으라고 했으니 

모든 생성자를 찾고 그 중에 가장 작은 수만 출력하는 것이 아니라 

처음부터 가장 작은 생성자만 찾으면 된다. 

1부터 시작이기 때문에 생성자를 찾으면 가장 작은 생성자가 되므로 그 수를 출력하고

for문을 break로 멈춰주면 된다.

 

예외 처리로는 생성자가 없는 경우를 해줘야 하는데, 

분해합은 생성자 + 생성자의 각 자릿수이기 때문에 생성자보다 큰 수일 수 밖에 없다.

결국 입력값과 생성자 i가 같게 된다면 생성자는 없는 것이다. 


코드

 

-파이썬

#백준 2231(분해합)

n = int(input())

for i in range(1, n+1):
    num = sum(map(int, str(i))) + i  #생성자의 각 자릿수 + 생성자
    if n == num:  #입력값과 분해합이 같으면
        print(i)
        break
    if n == i:  #입력값과 생성자가 같으면 생성자가 없는 경우
        print(0)
728x90
반응형

'알고리즘 > 백준' 카테고리의 다른 글

[파이썬] BOJ_2644(촌수계산)  (0) 2023.05.30
[파이썬] BOJ_2309(일곱 난쟁이)  (0) 2023.05.27
[파이썬] BOJ_8958(OX퀴즈)  (0) 2023.05.21
[파이썬] BOJ_17608(막대기)  (0) 2022.11.07
[파이썬] BOJ_1212(8진수 2진수)  (0) 2022.08.13