https://www.acmicpc.net/problem/2231
# 백준 2231 분해합
n = input()
n_list = list(map(int, n)) #1
n_len = len(n_list) #2
generator_list = []
for i in range(10 * n_len): #3
num = int(n) - i
if num < 0 : #4
break
num_list = list(map(int, str(num))) #5
create_num = num + sum(num_list) #6
if create_num == int(n):
generator_list.append(num)
if len(generator_list) == 0:
print(0)
else:
print(min(generator_list))
# 1 : 자릿수 분해를 위해 문자열로 받은 n을 리스트로 바꿔줍니다. 바꿔줄 때 리스트 안에 자료형을 정수로 하기 위해 map을 사용해줍니다.
# 2 : 자릿수가 몇개인지 저장합니다.
# 3 : 분해합 과정에서 모든 자릿수 합이 최대가 되는 경우는 전부 9인 경우이므로 원래 수에서 최소가 될 수 있는 값까지 빼주면서 반복해줍니다. 자릿수에 10을 곱한 이유는 모든 자릿수가 0~9까지 10개가 가능하고, 제일 첫 자릿수는 0이 안되기 때문에 10*n_len -1까지 반복하게 범위를 설정해줍니다.
# 4 : 반복 중에 0보다 작아지면 멈춥니다.
# 5 : 생성자 후보인 num의 자릿수를 분해 해줍니다. 처음과 같습니다.
# 6 : 생성자 후보의 분해합 결과를 create_num에 할당합니다. 그 후 처음 숫자와 일치하는지 확인하고 생성자 리스트에 추가해줍니다.
# 7 : 정답을 출력합니다.
'알고리즘 > 백준' 카테고리의 다른 글
[Python] 백준 파이썬 1018 체스판 다시 칠하기 (1) | 2022.09.24 |
---|---|
[Python] 백준 파이썬 7568 덩치 (1) | 2022.09.23 |
[Python] 백준 파이썬 2798 블랙잭 (0) | 2022.09.21 |
[Python] 백준 파이썬 25501 재귀의 귀재 (0) | 2022.09.20 |
[Python] 백준 파이썬 18870 좌표 압축 (0) | 2022.09.19 |