본문 바로가기
코딩테스트/파이썬

[백준] [브루트포스] 분해합 2231 (파이썬)

by 커피는아아 2021. 3. 15.
반응형

문제접근

  • 범위가 100만으로 제한된 다는 것은 많은 탐색을 요구할 때 보통 100만으로 주어진다.
  • 여러 생성자를 담아서 그 중에서 작은 값을 구하는 것

코드

# 분해합
n = int(input())

divide_list = [0,1,10,100,1000,10000,100000,1000000] # 연산을 할 배열을 미리 생성한다.
arr = [] # 생성자 리스트

for i in range(1,n): # 1부터 자기보다 작은 수를 탐색한다.
    next_num_list = [i]  # 생성자를 만들 리스트
    temp_num = i # 계산을 수행할 번호
    for j in range(len(str(i)),0,-1): # ex) 100이면 1의자리 10의자리 100의자리 총 3번 탐색해야하므로 위와 같이 범위를 설정한다. 
        if temp_num == 0:
            break
        next_num_list.append(temp_num // divide_list[j]) # 몫을 생성자 만드는 리스트에 추가한다.
        temp_num = temp_num % divide_list[j] # 숫자를 줄여준다.
    
    if sum(next_num_list) == n: # n의 생성자임을 만족한다.
        arr.append(i) # 생성자 목록에 추가한다.

if arr:
    print(arr[0])
else:
    print(0)