- 1번: 내가 작성한 풀이
from collections import deque
def solution(numbers, target):
total = sum(numbers)
n = len(numbers)
operators_list = deque()
answer = 0
get_operators([], operators_list, n)
for operators in operators_list:
res = total
for i in range(n):
if operators[i] == '-':
res -= 2 * numbers[i]
if res == target:
answer += 1
return answer
def get_operators(ops, operators_list, n):
if len(ops) == n:
operators_list.append(ops[:])
return
ops.append('+')
get_operators(ops, operators_list, n)
ops.pop()
ops.append('-')
get_operators(ops, operators_list, n)
ops.pop()
- 2번: 1번 성공 후 참고한 풀이
def dfs(nums, i, n, target):
ret = 0
if i == len(nums):
if n == target: return 1
else: return 0
ret += dfs(nums, i+1, n+nums[i], target)
ret += dfs(nums, i+1, n-nums[i], target)
return ret
def solution2(numbers, target):
answer = dfs(numbers, 0, 0, target)
return answer
- 확인하기!
- 처음에 eval() 함수로 계산을 시도했지만 시간 초과가 나왔다. eval() 함수는 확실히 느리다..!
- 위의 두개의 코드를 비교했을 때, 내가 작성한 코드가 성능면에서 많이 좋지 않았다.
두번째 코드를 복기하며, 재귀함수에 대해 더 깊이 이해할 수 있었다.
계속해서 재귀함수를 유연하게 활용하는 법에 대해 고민해봐야겠다.
- 불필요한 할당은 배제하자!
'> 알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
lv1-약수의 합 (python, 파이썬) (0) | 2020.10.21 |
---|---|
lv1-수박수박수박수박수박수? (python, 파이썬) (0) | 2020.10.21 |
lv2-전화번호 목록 (python, 파이썬) (0) | 2020.10.20 |
lv1-문자열 내 마음대로 정렬하기 (python, 파이썬) (0) | 2020.10.19 |
lv1-체육복 (python, 파이썬) (0) | 2020.10.19 |
댓글