티스토리 뷰

접근법
생소한 개념이라 문제를 이해하기 어려웠다.
핵심은 가장 작은 생성자를 구해야 한다는 점이다. 입력값 N이 주어졌을 때 생성자를 만드는 규칙에 따라서 가장
작은 숫자부터 차례대로 확인을 하면 편할 것이다.
즉, 생성자를 만드는 규칙은 모든 자리의 수와 해당 숫자를 더했을 때 입력값 N을 만족시키면 되기 때문에
N의 각 자릿수의 최대값은 9로 N ± ( 자릿수 * 9 ) 만큼의 범위만 확인해주면 된다 !
예를 들어서 256이라는 숫자라고 한다면 각 자리의 숫자는 가장 큰 숫자가 9이므로
256 - 27 = 229 이므로 229부터 차례대로 규칙에 따라 N을 만족하는지 확인하면 된다.
풀이
def constructor(N):
minimum = N - len(str(N)) * 9
minimum = 1 if minimum < 1 else minimum
for i in range(minimum, N):
Sum = i
Sum += sum(map(int,str(i)))
if Sum == N:
print(i)
return
print(0)
constructor(int(input()))
'프로그래밍 > BOJ' 카테고리의 다른 글
| 백준 #1018: 체스판 다시 칠하기 [Python] (0) | 2020.02.15 |
|---|---|
| 백준 #7568: 덩치 [Python] (0) | 2020.02.14 |
| 백준 #2798: 블랙잭 [Python] (0) | 2020.02.12 |
| 백준 #11729: 하노이 탑 이동 순서 [Python] (1) | 2020.02.12 |
| 백준 #2447: 별찍기 [Python] (1) | 2020.02.11 |
댓글