프로그램/Python
[프로그래머스 문제풀이] N으로 표현
naudhizb
2022. 4. 21. 00:14
반응형
DP문제는 아무래도 재귀 형식으로 표현하여 sub 문제들을 해결하여 큰 문제를 해결할 수있도록 하는 틀을 짜는 능력이 중요한것 같다.
이 문제의 경우에는 생각해보았지만, 해당 틀을 떠올리지 못해서 다른 소스코드를 참고하여 짠 코드이다.
발상 방법이야 여러개 있지만 내가 동작 시킨 코드는 아래와 같다.
def calc(A, B):
ret = set()
for a in A:
for b in B:
ret.add(a + b)
ret.add(a - b)
ret.add(a * b)
if b != 0:
ret.add(a // b)
return list(ret)
def solution(N, number):
answer = 0
# merge plus substract times divide
result = dict()
for i in range(1, 9):
result[i] = set()
result[i].add(int(str(N) * i))
#print(result)
if N==number:
return 1
for i in range(2, 9):
for j in range(1, i):
k = calc(result[j], result[i-j])
result[i].update(k)
if number in result[i]:
return i
return -1
return answer
각 자릿수별로 만들 수 있는 값을 int, set()으로 묶어 딕셔너리로 구현하고,
f(n) = {f(1):f(n-1) ... f(n-1):f(1)} (여기서 : 는 +-*//의 4가지 연산을 대입)
으로 설정하여 각 조합에 따라 각 연산을 set에 대입하여 문제를 풀 수 있도록 한다.
값의 계산은 8까지 하며, 8자리까지 수행하였을 때 원하는 값이 없다면(루프를 탈출한다면) 자동으로 -1을 리턴하도록 프로그램을 수행하였다.
반응형