Written by
최태열
on
on
[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