2231번 분해합
https://www.acmicpc.net/problem/2231
문제 확인
예제
# 입력
216
# 출력
198
문제 분석
자연수 N의 가장 작은 생성자 구하기 (없는 경우/ 여러 개의 경우도 존재)
- 없으면 0 출
자연수 N = N과 N을 이루는 각 자리수의 합
(ex. 256 = 245 + 2 + 4 + 5 )
1부터 입력받은 n까지 for문을 통해 분해합을 구해보고 그 합이 n과 같다면 출력 후 break해준다.
같지 않을 시, 분해합이 없는 경우로 간주하여 0 출력하고 다음 반복을 진행한다.
분해합을 구하는 알고리즘이 관건인 것 같은데...!
범위 내의 모든 수에 접근하기 위해 반복 변수인 i를 이용해준다.
i의 각 자리수를 우선 다 더해서 위의 예시에서는 (2 + 4 + 5) 와 같은 값을 구해준다. = ndigit
어차피 분해합은 각 자리수를 연결한 값이 생성자이므로 ndigit + i 를 연산하여 nsum에 저장해준다.
이 분해합 구하는 걸 n의 범위 내에서 반복하면 된다.
n = int(input())
for i in range(1, n+1):
ndigit = sum((map(int, str(i))))
nsum = ndigit + i
if nsum == n:
print(i)
break
if i == n:
print(0)
'SWLUG > 파이썬 (코딩테스트)' 카테고리의 다른 글
[파이썬/백준] 9184번 : 신나는 함수 실행 (10) | 2024.09.16 |
---|---|
[파이썬/백준] 1932번 정수 삼각형 (0) | 2024.09.16 |
[파이썬/백준] 2798번 블랙잭 (0) | 2024.05.07 |
[파이썬/백준] 1 2 3 더하기 & 부녀회장이 될테야 (0) | 2024.04.28 |
[파이썬/백준] 내리막길, 양팔저울 (1) | 2024.04.27 |