[백준] 2231 : 분해합 (Python)
문제 링크 : https://www.acmicpc.net/problem/2231
풀이 코드
num_in = int(input())
num_least = num_in - 9*len(str(num_in))
if num_least<0:
num_least=0
for num in range(num_least,num_in):
sum = num
for i in str(num):
sum += int(i)
if sum == num_in:
print(num)
break
else:
if num == num_in - 1:
print(0)
break
풀이 해설
단순히 0부터 입력받은 숫자까지 전체 탐색을 할 경우 시간 초과가 나는 문제입니다
그렇기 때문에 탐색을 시작할 최소값을 지정해야하는데
각 자리의 수가 0~9 까지인 점을 고려하여
숫자의 길이 * 9 만큼 뺀 수 부터 탐색을 하는 것이 바람직한 문제였습니다
이 문제에서 num_least 라는 값이 음수가 나올 수 있기에
Ex) 3 입력 -> -6
int 변환에서 오류가 발생할 수 있어 num_least가 음수인 경우, 0부터 탐색하도록 하였습니다
댓글남기기