https://programmers.co.kr/learn/courses/30/lessons/43165
코딩테스트 연습 - 타겟 넘버
n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+
programmers.co.kr
1차 시도 - Stack
def solution(numbers, target):
answer = 0
stack = [[numbers[0],0], [-1*numbers[0],0]] #[value, idx]
n = len(numbers)
while stack:
temp, idx = stack.pop() #target
idx += 1 #다음거에
if idx < n: #child를 넣는다
stack.append([temp+numbers[idx], idx])
stack.append([temp-numbers[idx], idx])
else:
if temp == target: answer += 1 #child를 끝까지 넣었으면 그 끝에 계산된 값이 나오니까 그게 target인지 검사
return answer
2차 시도 - Recursion
def solution(numbers, target):
n = len(numbers)
answer = 0
def dfs(idx, result):
if idx == n:
if result == target:
nonlocal answer
answer += 1
return
else:
dfs(idx+1, result+numbers[idx])
dfs(idx+1, result-numbers[idx])
dfs(0,0)
return answer
💡최종로직
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [Python] Level2_조이스틱 (0) | 2021.10.02 |
---|---|
[프로그래머스] [Python] Level1_K번째 수 (0) | 2021.09.30 |
[프로그래머스] [Python] Level3_디스크 컨트롤러 (0) | 2021.08.05 |
[프로그래머스] [Python] Level2_주식가격 (0) | 2021.08.05 |
[프로그래머스] [Python] Level3_여행경로 (0) | 2021.08.05 |
댓글