https://school.programmers.co.kr/learn/courses/30/lessons/43165
[ํ๊ฒ ๋๋ฒ]
level 2
from collections import deque
def solution(numbers, target):
que = deque()
que.append((1, numbers[0]))
que.append((1, -numbers[0]))
result = 0
while que:
q = que.popleft()
if q[0] == len(numbers):
if q[1] == target:
result += 1
else:
que.append((q[0]+1, q[1] + numbers[q[0]]))
que.append((q[0]+1, q[1] - numbers[q[0]]))
return result
print(solution([4,1,2,1], 4))
๊ฐ์ ๋ํ๊ณ ๋นผ๋ ๊ฒฝ์ฐ๋ง ์๊ฐํ๋ฉด ๋๋ฏ๋ก ์ด์งํธ๋ฆฌ ํ์์ผ๋ก ์๊ฐํ๋ฉด ์ฝ๊ฒ ์ดํดํ ์ ์๋ค.
์ด์งํธ๋ฆฌ์ ๊ฐ ๋ ๋ฒจ์ด numbers์ ์ธ๋ฑ์ค ๋ฒํธ๊ฐ ๋๊ณ , ํด๋น numbers[level] ๊ฐ์ ๋ํ ์ง ๋บ์ง์ ๊ฒฝ์ฐ๊ฐ ๋๋ ์ง๋ค.
BFS์ ํต์ฌ์ธ queue์ ๊ฐ ๊ฒฝ์ฐ์ ๋ํด์ tupleํํ๋ก (level, ํ์ฌ๊น์ง ๊ฐ)์ ์ฐ์ํ์ฌ ์ฝ์ ํ๋ค.
queue์์ ๊บผ๋ธ q ๋ ๋น์ฐํ ๋ณธ์ธ์ level๊ณผ ๊ฐ์ ๊ฐ์ง๊ณ ์์ ๊ฒ์ด๋ค.
์์ ๋งํ๋ฏ level๊ณผ numbers์ ์ธ๋ฑ์ค๋ ๊ฐ๋ค.
์ด๋ numbers[level]์ ๊ฐ์ ๋ํ ๊ฒ์ธ์ง ๋บ๊ฒ์ธ์ง๋ก ์ฐ์ฐ์ ๋ถ๋ฆฌํ์ฌ ์ํํ ์ ์๋๋ก ํ๋ค.
๊ฒฐ๊ตญ ์ฐ๋ฆฌ๋ ๋ชจ๋ numbers์ ๊ฐ์ ์ฌ์ฉํ์ ๋ target์ ๊ฐ๊ณผ ๊ฐ์์ง๊ฐ ๊ถ๊ธํ๋ฏ๋ก
tree์ leaf node์ผ ๋, ๋ค์ ๋งํด์ level์ด numbers์ ๊ธธ์ด์ ๊ฐ์์ง ๋ ๊ฐ์ด target๊ณผ ๊ฐ์์ง๋ง ํ์ธํ๋ฉด ๋๋ค.