취미가 좋다
2231. 분해합 본문
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로 변환하는 함수를 적용시켰다.
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
22868. 산책 (small) (0) | 2021.09.04 |
---|---|
14890. 경사로 (0) | 2021.08.26 |
1018. 체스판 다시 칠하기 (0) | 2021.08.14 |
7568. 덩치 (0) | 2021.08.13 |
1065. 한수 (0) | 2021.08.05 |
Comments