알고리즘 문제풀이/백준
2231. 분해합
benlee73
2021. 8. 13. 12:21
https://www.acmicpc.net/problem/2231
2231번: 분해합
어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이
www.acmicpc.net
Solution
num = int(input())
ans = max(num-54, 1)
while(1):
temp = ans
sum = 0
while(temp):
sum += temp % 10
temp = temp // 10
if num == ans + sum:
print(ans)
break
elif num < ans:
print(0)
break
ans += 1
- 입력 값이 1,000,000 이하이므로 각 자리수의 합은 아무리 커도 54를 넘지 않는다.
- 탐색을 시작할 값을 ans에 넣고, 각 자리수의 합을 while 문으로 구한다.
- ans을 증가시키면서
Another
n = int(input())
for i in range(max(1, n-54),n):
if sum(map(int,str(i)))+i == n:
print(i)
exit(0)
print(0)
- while문 대신 for문을 사용했다.
- 각 자리수의 합을 map을 이용하여 구했다.
- exit를 사용해서 마지막 print(0)에 다른 조건을 달지 않아도 되도록 하였다.
map(변환 함수, 순회 가능한 데이터)
위에서는 숫자 i를 string으로 바꿔서 각 자리수마다 int로 변환하는 함수를 적용시켰다.