DP

박진은·2023년 5월 5일
0

코테

목록 보기
35/44
def solution(N, number):
    
    if N == number:
        return 1
    
    num_list = [set() for x in range(8)] #인덱스 + 1 이 사용된 숫자의 갯수
    
    for i in range(1,8+1):
        value = int(str(N)*(i))
        print(value)
        if number == value:
            return i
        num_list[i-1].add(value)
        
    
    
    for i in range(1,8+1): # 1개 일때는 N 말고 다른 선택지가 없음
        for e in range(i-1):# i개 는 i-1 의 위치에 
            for j in range(i-e-1): # i 개의 N을 만드는데 e 개를 제외한 나머지 개의 N을 사용해서 나오는 수의 집합
                
                for val1 in num_list[e]:
                    for val2 in num_list[j]:
                        num_list[i-1].add(val1+val2)
                        num_list[i-1].add(val1-val2)
                        num_list[i-1].add(val1*val2)
                        num_list[i-1].add(val2-val1)
                        if val1 != 0:
                            num_list[i-1].add(val2//val1)
                        if val2 != 0:
                            num_list[i-1].add(val1//val2)
                        
    for j,num in enumerate(num_list[:8]):
        for i in num:
            if number == i:
                return j+1
    return -1    
            

전의 연산을 기억하기 자리수 만큼의 수를 기억하는것이 필수적이다.
만을 6개의 N을 이용한거면 (1,5) (2,4)(3,3)...(5,1) 이조합의 수 많큼 가능한 값이 존재한다는 점이 어려줬다.

profile
코딩

0개의 댓글