2026.04.01
์์ ์ผ์ค๋ฅผ ๋๋ ์ ๋ํ๋๊ฒ ๋ ์ข์์ ๊ฒ ๊ฐ๊ธฐ๋ ํ๋ค
๊ฐ์ dfs์ง๋ง ์ด ์ฝ๋๊ฐ ๋ ๊ฐ๋จํจ
def dfs(curr, numbers, target, i):
# 0 > 0-4=-4 > -4-1=-5 > -5-2=-7 > -7-1=-8
if i == len(numbers):
if curr == target:
return 1
return 0
left = dfs(curr-numbers[i], numbers, target, i+1)
right = dfs(curr+numbers[i], numbers, target, i+1)
return left + right
def solution(numbers, target):
# dfs ์ ๊ทผ๋ฒ
# ์์ ๊ฐ 0์์ ์ข์ฐ๋ก -1, +1 ๋๋ ์ ๋ค์ด๊ฐ๋ ๊ฒ
return dfs(0, numbers, target, 0)
2026.04.01
itertools๋ฅผ ์ฌ์ฉํ๋ฉด ํจ์ฌ ๋ฌธ์ ๋ฅผ ๊ฐ๋จํ๊ฒ ํ๊ธดํจ
from itertools import product
def solution(numbers, target):
# ๊ฒฐ๊ตญ ๋ชจ๋ ์กฐํฉ์ ๊ณ์ฐํด๋ณด๊ณ target์ด๋ ๊ฐ์ ์๋ฅผ return ํด์ผ ํ๋ค
# ๊ฐ ์ซ์ ์์ -1 ํน์ 1์ ๊ณฑํด์ ๋ค ๋ํ๋ฉด ๋๋ ๊ตฌ์กฐ
# ๊ทธ ๋ชจ๋ ์กฐํฉ์ ์ด๋ป๊ฒ ์
๊ฒ์ธ๊ฐ
minus_plus = [-1, 1]
answer = 0
for perm in product(minus_plus, repeat=len(numbers)):
# [-1,1,-1,1,1]
number = 0
for idx, p in enumerate(perm):
number += p * numbers[idx]
if number == target:
answer += 1
return answer
์ฌ์ค dfs/bfs๋ก ๋ถ๋ฅ๋์ด์์ง ์์ผ๋ฉด ๊ทธ๋ํ๋ก ์ ๊ทผํด์ ํ ์๊ฐ์ ์ํ์ ๊ฒ ๊ฐ๊ธฐ๋ ํ๋ค ,, ใ
๊ทธ๋ฌ๋ ์ด์จ๋ ํฌ๊ฒ ์ด๋ ต์ง ์๊ฒ ์ ์ ๊ทผํจ
global ๋ณ์๋ ์ ์ฐ๋๊ฒ ์ค์ํ๋ค
answer = 0
def dfs(numbers, curr, target, result, depth):
global answer
if depth == len(numbers):
if result == target:
answer += 1
return
dfs(numbers, curr+1, target, result+numbers[curr], depth+1)
dfs(numbers, curr+1, target, result-numbers[curr], depth+1)
def solution(numbers, target):
# answer = 0
dfs(numbers, 0, target, 0, 0)
return answer'๐ Study > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ํ๋ก๊ทธ๋๋จธ์ค Lv2 | ์์ ํ์ | ์์ ์ฐพ๊ธฐ (0) | 2025.10.11 |
|---|---|
| ํ๋ก๊ทธ๋๋จธ์ค Lv2 | ์ ๋ ฌ | ๊ฐ์ฅ ํฐ ์ (0) | 2025.10.09 |
| ํ๋ก๊ทธ๋๋จธ์ค Lv3 | dfs/bfs | ์ฌํ๊ฒฝ๋ก (0) | 2025.10.09 |
| ํ๋ก๊ทธ๋๋จธ์ค | dfs/bfs | ๋จ์ด๋ณํ (0) | 2025.10.09 |
| ํ๋ก๊ทธ๋๋จธ์ค | dfs/bfs | ๋คํธ์ํฌ (0) | 2025.10.09 |