문제 설명
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 함수를 작성해주세요.
제한사항
- 주어지는 숫자의 개수는 2개 이상 20개 이하입니다.
- 각 숫자는 1 이상 50 이하인 자연수입니다.
- 타겟 넘버는 1 이상 1000 이하인 자연수입니다.
해결 방법
1. 이진 트리의 형태로 구성될 수 있고, 모든 노드를 말단까지 탐색 한 후 target에 만족하는 값이 되는지를 검사해야한다.
따라서 BFS를 사용했다. (DFS도 사용 가능)
2. 다음에 계산할 값을 각각 +, -하고 2개의 노드를 생성해 queue에 담아준다.
해결 코드
from collections import deque
def solution(numbers, target):
answer = 0
queue = deque() #queue 생성
length = len(numbers)
queue.append([-numbers[0], 0])
queue.append([+numbers[0], 0])
while queue :
num, i = queue.popleft()
if i+1 == length :
if num == target : answer += 1
else :
queue.append([num - numbers[i + 1], i + 1])
queue.append([num + numbers[i + 1], i + 1])
return answer
'Programming > Algorithm' 카테고리의 다른 글
[Python/알고리즘] DFS : 여행경로 (프로그래머스) (0) | 2021.07.18 |
---|---|
[Python/알고리즘] DFS : 네트워크 (프로그래머스) (0) | 2021.07.18 |
[Python/알고리즘] BFS : 단어변환 (프로그래머스) (2) | 2021.07.18 |
[Python / 알고리즘] 완전탐색 : 소수찾기 (프로그래머스) (0) | 2021.06.26 |
[Python/알고리즘] 힙 : 디스크 컨트롤러 (프로그래머스) (0) | 2021.06.03 |