[프로그래머스] 타겟 넘버
[프로그래머스] 타겟 넘버
문제
링크 : 프로그래머스
풀이
문제 생략,
이 문제는 dfs를 활용하여 조합을 target number에 맞는 수를 찾는 문제이다.
+, -를 이용해서 target number에 도달하는 경우의 수를 구하는 것이므로
+, - 각각의 경우의 재귀함수를 이용해서 마지막까지 도달했을 때, target number와 일치하면
answer에 1을 더 해준다.
다음과 같은 로직을 생각해서 코드를 짜주면 다음과 같다.
answer = 0
def dfs(numbers, target, index, res):
if len(numbers)-1 == index:
if res == target:
global answer
answer += 1
return
index += 1
dfs(numbers, target, index, res + numbers[index])
dfs(numbers, target, index, res - numbers[index])
return
def solution(numbers, target):
dfs(numbers, target, 0, numbers[0])
dfs(numbers, target, 0, -numbers[0])
return answer
# 다른 사람 정답
def solution(numbers, target):
if not numbers and target == 0:
return 1
elif not numbers:
return 0
return solution(numbers[1:], target + numbers[0]) + solution(numbers[1: ], target - numbers[0])
실수했던 점
조합을 찾아야 한다는 생각에 combinations에 매달려 있었다.
그런데 combinations에서 안되었던 점은 tuple이라는 특성 때문에 변경이 불가했다.
여기서 계속 빠져있었기에 탐색을 써야한다는 생각을 아예 하지 못했던 것 같다.
다른 사람의 풀이를 보면서 논리만 제대로 이해한다면 효율적으로 코드를 짤 수 있다고 생각했다.
실천해야겠다.
다양하게 많이 생각해야겠다.