n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다.
사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요.
numbers | target | return |
---|---|---|
[1, 1, 1, 1, 1] | 3 | 5 |
DFS 풀이
# DFS 풀이
answer = 0
def dfs(start, numbers, target, result): # solution 메소드에서 재귀 호출을 위해 dfs 메소드 따로 정의
global answer # 전역 변수로 선언
if start == len(numbers):
if result == target:
answer += 1
return # 모두 탐색했으므로 return
# -, + 를 나누어 재귀 호출
dfs(start + 1, numbers, target, result + numbers[start])
dfs(start + 1, numbers, target, result - numbers[start])
def solution(numbers, target):
global answer
dfs(0, numbers, target, 0) # 맨 앞 0부터 dfs 실행
return answer
BFS 풀이
# BFS로
from collections import deque
def solution(numbers, target):
answer = 0
queue = deque()
queue.append((0, 0)) # (현재 확인중인 인덱스, 결과값) 삽입
while queue:
idx, result = queue.popleft()
if idx == len(numbers):
if result == target:
answer += 1
else:
# 다음 확인할 인덱스와 현재 숫자를 누적합에 +, - 해서 삽입
queue.append(idx + 1, result + numbers[idx])
queue.append(idx + 1, result - numbers[idx])
[프로그래머스] 네트워크 - 파이썬(Python) / BFS, DFS (0) | 2021.12.31 |
---|---|
[프로그래머스] 다리를 지나는 트럭 - 파이썬(Python) / 스택, 큐 (0) | 2021.12.15 |
[프로그래머스] 기능 개발 - 파이썬(Python) / 스택/큐 (0) | 2021.12.15 |
[프로그래머스] 더 맵게 - 파이썬(Python)/힙 (0) | 2021.12.15 |
[Python] 문자열 압축 - 파이썬(Python) (0) | 2021.12.15 |