~๋ชฉ์ฐจ~
๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/43165
๋ฌธ์ ํด๊ฒฐ ํฌ์ธํธ
- Queue๋ฅผ ์ด์ฉํ์ฌ BFS๋ก ํ์
- ๋ชจ๋ numbers์ ์์์ ๋ํด์ +์ -๋ฅผ ์กฐํฉํ๋ค๊ฐ ๋ชจ๋ ์๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๊ทธ ๋ target๊ณผ ๊ฐ์ด ๊ฐ์์ง ๋น๊ต
- queue์ ๊ณ์ฐ๋ ๊ฐ๊ณผ ์ฌ์ฉ๋ ์ซ์ ๊ฐ์๋ฅผ ๊ฐ์ด ์ฝ์ ํจ์ผ๋ก์จ ๋ฌดํ๋ฃจํ์ ๋น ์ง์ง ์๊ฒ ํจ
- ์ฆ popํ ๊ฒฐ๊ณผ๊ฐ ์์ง ๋ชจ๋ ์ซ์๋ฅผ ์ฌ์ฉํ์ง ์์๋ค๋ฉด ๋ค์ ์ซ์๋ฅผ ๋ํ๊ณ ๋บ ๊ฐ์ ๋ค์ queque์ ์ฝ์
์์ฑ ์ฝ๋
from collections import deque
def solution(numbers, target):
que = deque() # deque ์ ์ธ
result = 0
que.append((numbers[0], 1)) # '๊ฒฐ๊ณผ ๊ฐ'๊ณผ '์ฌ์ฉ๋ ์ซ์ ๊ฐ์' ์ฝ์
que.append((-numbers[0], 1))
while que: # queue์ ๊ฐ์ด ์์ ๋๊น์ง ๋ฐ๋ณต
q = que.popleft() # ๋งจ ์ ๋ฐ์ดํฐ ๋นผ๊ธฐ
if q[1] == len(numbers): # ์ฃผ์ด์ง ๋ชจ๋ ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ์ฐ ํ์ ๋
if q[0] == target: # ๊ฒฐ๊ณผ ๊ฐ์ด ์ฐพ๋ ๊ฐ๊ณผ ๊ฐ๋ค๋ฉด
result += 1
else:
# 'ํ์ฌ๊น์ง ๊ฒฐ๊ณผ +- ๋ค์ ์', '์ฌ์ฉ๋ ์+1'
que.append((q[0]+numbers[q[1]], q[1]+1))
que.append((q[0]-numbers[q[1]], q[1]+1))
return result
๋์์ด ๋์ จ๋ค๋ฉด ์ข์์ ๋๋ฌ์ฃผ์ธ์๐