코딩하는 문과생
[알고리즘 풀이][python] 프로그래머스 LV2, '타겟 넘버' 본문
<문제 설명>
n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다.
-1+1+1+1+1 = 3 +1-1+1+1+1 = 3 +1+1-1+1+1 = 3 +1+1+1-1+1 = 3 +1+1+1+1-1 = 3
사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요.
<참고한 풀이>
def solution(numbers, target):
cnt = 0
def operator(numbers, target, idx=0):
if idx < len(numbers):
numbers[idx] *=1
operator(numbers, target, idx +1)
numbers[idx] *= -1
operator(numbers, target, idx+1)
elif sum(numbers) == target:
nonlocal cnt
cnt +=1
operator(numbers, target)
return cnt
<다른사람 풀이 DFS>
answer = 0
def DFS(idx, numbers, target, value):
global answer
N = len(numbers)
if(idx== N and target == value):
answer += 1
return
if(idx == N):
return
DFS(idx+1,numbers,target,value+numbers[idx])
DFS(idx+1,numbers,target,value-numbers[idx])
def solution(numbers, target):
global answer
DFS(0,numbers,target,0)
return answer
<다시 되새기며 작성한 풀이>
answer = 0
def DFS(numbers, target, idx, value):
global answer
N=len(numbers)
if idx == N:
if target == value:
answer +=1
return
else:
return
DFS(numbers, target, idx+1, value+numbers[idx])
DFS(numbers, target, idx+1, value-numbers[idx])
def solution(numbers, target):
global answer
DFS(numbers, target, 0, 0)
return answer
'프로그래밍 > 알고리즘 풀이' 카테고리의 다른 글
[알고리즘 풀이][python] 프로그래머스 LV1, '체육복' (0) | 2019.11.17 |
---|---|
[알고리즘 풀이][python] 프로그래머스 LV3, '타일 장식물' (0) | 2019.11.17 |
[알고리즘 풀이][python] 프로그래머스 LV2, '더 맵게' (0) | 2019.11.17 |
[알고리즘 풀이][python] 프로그래머스 LV2, '탑' (0) | 2019.11.16 |
[알고리즘 풀이][python] 프로그래머스 LV1, '완주하지 못한 선수' (0) | 2019.11.16 |