728x90
반응형
문제
https://www.acmicpc.net/problem/2231
해설
분해합이 생성자 + 생성자의 각 자릿수이기 때문에
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 |