https://programmers.co.kr/learn/courses/30/lessons/42895
'''
DP N 으로 표현.
N 과 number 가 주어질 때 N을 최소로 사용하여 number를 표현.
ex) 5로 12표현
state(1) = (int(str(N)*1))
state(2) = 5+5 , 5-5 , 5*5 , 5/5 , (int(str(N)*2))
state(3) = state(2)+5 , state(2)-5 , state(2)/5 ,(int(str(N)*3))
state(4) = state(2) + state(2) , ...
'''
def solution(N, number):
if N == number:
return 1
num_set = [set() for i in range(8)] # 최소값은 8까지
for count, state in enumerate(num_set, start=1):
state.add(int(str(N) * count))
for i in range(1,8): # 1부터 7까지
for j in range(i): # 0부터 i 앞까지
for oper1 in num_set[j]: # j번째 연산결과
for oper2 in num_set[i-j-1]: # i번째에 추가시킬꺼니 -1
num_set[i].add(oper1 + oper2)
num_set[i].add(oper1 - oper2)
num_set[i].add(oper2 - oper1)
num_set[i].add(oper1 * oper2)
if oper1 != 0:
num_set[i].add(oper2 // oper1)
elif oper2 !=0:
num_set[i].add(oper1//oper2)
if number in num_set[i]:
return i+1
else:
return -1
'Programming > Programmers' 카테고리의 다른 글
[프로그래머스] 정수삼각형(Python) (0) | 2021.08.12 |
---|---|
[프로그래머스] 디스크 컨트롤러(Python) (0) | 2021.08.12 |
[프로그래머스] 입국심사(Python) (0) | 2021.08.12 |
[프로그래머스] 도둑질(Python) (0) | 2021.08.12 |
[프로그래머스] 징검다리(Python) (0) | 2021.08.12 |
댓글