취미가 좋다

2231. 분해합 본문

알고리즘 문제풀이/백준

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로 변환하는 함수를 적용시켰다.

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

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