📖What I thought
- 처음엔 숫자를 몇 개만 써도 되는 줄 알고 코드 작성이 이상했음
- 첫 숫자부터 뒷 숫자를 하나는 + 하나는 -해서 계속 큐에 넣어줌
- 타겟 숫자에 도달하기만하면 카운트 +1
타겟 숫자에 도달 못했으면 ?? 계속 + - 해줘
→ 타겟숫자에 도달하면 이후 뒷 숫자 반복문을 안돌았음 (왜냐면 타겟 숫자 도달하지 못했을 때만 뒷 숫자 + - 해서 dq에 넣어줬으니까)
- 근데 모든 숫자를 다 썼어야 하는거지
즉, 결국엔 이프문 조건이 타겟숫자를 만족하냐 안하냐가 아니라 넘버스를 계속 + -해오면서 마지막 숫자까지 + - 해주었을 때(즉, 인덱스가 마지막 인덱스에 도달했을 때)의!!! 값이 타겟 숫자가 되어야 해용
- BFS로 첫 숫자부터 뒷 숫자를 하나는 + 하나는 -해서 큐에 푸시하고 큐 안에 값 있는 동안 계속 이거 반복해
- 근데 그냥 숫자만 큐에 넣어주면 이게 모든 숫자를 다 쓴지 몇 개만 쓴지 알 수가 없잖아?)
- 그러니까 큐에 넣을 때 + -된 값이랑 인덱스(그니까 현재 숫자 몇 개 쓴 지)를 튜플 형태로 넣어줘
- 인덱스가 마지막 인덱스가 아니라면?? 그냥 뒷 숫자 + - 해줭~~
마지막 인덱스라면?? 모든 숫자를 다 사용했다는 뜻. 요 때 타겟 넘버가 되면 정답 +1 해주쎄용~~
📖풀이
📎BFS
from collections import deque
def solution(numbers, target):
n, cnt = len(numbers), 0
dq = deque([(numbers[0], 0), (-numbers[0], 0)])
while dq:
x, i = dq.popleft()
i += 1
if i == n:
if x == target:
cnt += 1
continue
dq.extend([(x + numbers[i], i), (x - numbers[i], i)])
return cnt
📖What I learned
- 문제를 꼼꼼히 읽자 ㅎㅎ ;;
📖관련 지식