[Python][프로그래머스][Level3] N으로 표현

[Python][프로그래머스][Level3] N으로 표현

코드

from itertools import product
def solution(N, number):
    if N==number:
        return 1
    
    check=[[] for _ in range(9)]
    check[1]=[N]
    for i in range(2,9):
        for j in range(1,i//2+2):
            for x,y in product(check[i-j],check[j]):
                check[i].append(x+y)
                check[i].append(x-y)
                check[i].append(x*y)
                if y:
                    check[i].append(x//y)
        check[i].append(sum([N*(10**a) for a in range(i)]))
        check[i]=list(set(check[i]))
        if number in check[i]:
            return i
    else:
        return -1

조합과 점화식을 활용해 풀었다.

num개의 N으로 만들 수 있는 숫자는

num-1 개로 만들 수 있는 숫자 (+,-,*,//) 1개로 만들 수 있는 숫자

num-2 개로 만들 수 있는 숫자 (+,-,*,//) 2개로 만들 수 있는 숫자

num-4 개로 만들 수 있는 숫자 (+,-,*,//) 3개로 만들 수 있는 숫자

…… 이다.

따라서 num개로 만든 숫자들을 check에 넣고 거기서 한개 씩 뽑아서 조합하는 형태로 하면 문제를 풀 수 있다.

Discussion and feedback