백준 2231 풀이

Updated:

2231

분해합

IPO

I : Processing을 통해 최소 생성자를 찾을 자연 수

P : 최소 생성자 찾기

O : 최소 생성자 (단: 생성자가 없는 경우 0을 출력)

def make_sum(num):
    num = ",".join(num)
    num = num.split(',')
    num = list(map(int,num))
    return num
  • ,string으로 입력받아 join 함수를 활용하여 , 로 자릿수 구분
  • split함수를 통해 ,를 기준으로 슬라이싱 후 데이터 타입 변환
def make_source(list_num):
    source = 0
    for i in list_num:
        source += i
    return source
  • 각 자릿수의 합 값 구하기
for i in range (int(num) - (len(num) * 9) , int(num) + 1):
    print(i)
    print(make_sum(str(i)))
    print(make_source(make_sum(str(i))),"\n")
    
    if i + make_source(make_sum(str(i))) == int(num):
        print("----------")
        print(i)
        print("----------")
        break
  • 각 자릿수의 값에 취할 수 있는 최대값은 자릿수의 길이 * 9.
  • ex) 232 -> 999 : 3 * 9 = 27
  • 따라서 (int(num) - (len(num) * 9) 부터의 범위만 확인, 생성자의 지침에 일치할 시 return

Leave a comment