๋ฌธ์ ๋งํฌ: programmers.co.kr/learn/courses/30/lessons/43165
๋ฌธ์ ์ค๋ช
๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ DFS(๊น์ด ์ฐ์ ํ์)์ผ๋ก ํ์ธํด์ ํ๊ฒ ๋๋ฒ๋ฅผ ๋ง๋๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ต๋๋ค.
์์ค์ฝ๋
answer = 0
def dfs(idx, numbers, total_sum, target):
global answer
n = len(numbers)
# ๋ง์ง๋ง ์์๊น์ง ๊ณ์ฐํ๋ค๋ฉด return
if idx == n - 1:
# ํ๊ฒ ๋๋ฒ๋ฅผ ๋ง๋๋ ๊ฒฝ์ฐ
if total_sum == target:
answer += 1
return
# ๋ค์ ์์๋ฅผ ๋ํ ๊ฒฝ์ฐ
dfs(idx + 1, numbers, total_sum + numbers[idx + 1], target)
# ๋ค์ ์์๋ฅผ ๋บ ๊ฒฝ์ฐ
dfs(idx + 1, numbers, total_sum - numbers[idx + 1], target)
def solution(numbers, target):
global answer
dfs(-1, numbers, 0, target)
return answer
๋ค๋ฅธ ์ฌ๋์ ํ์ด
โ ์ฌ๊ท๋ฅผ ์ด์ฉํ ํ์ด
์๋ฅผ ๋ค์ด numbers = [1, 2, 3, 4, 5], target = 6 ์ผ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ด ์๋ค.
๋ง์ฝ [2, 3, 4, 5]๋ก 5 ๋๋ 7์ ๋ง๋ค ์ ์๋ค๋ฉด, 1์ ๋ํ๊ฑฐ๋ ๋นผ์ ํ๊ฒ ๋๋ฒ์ธ 6์ ๋ง๋ค ์ ์์ต๋๋ค.
์ด์ ๊ฐ์ ์์ด๋์ด๋ก ์ฌ๊ท ํจ์๋ฅผ ์ด์ฉํ ํ์ด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
def solution(numbers, target):
# numbers๋ก target์ ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ
if not numbers and target == 0 :
return 1
# numbers๋ก target์ ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ
elif not numbers:
return 0
else:
# ๋ฆฌ์คํธ์ ์ ์์๋ถํฐ ์์๋๋ก
# (ํด๋น ์์๋ฅผ ๋ํ์ ๋์ ์ ๋ต ๊ฐ์) + (ํด๋น ์์๋ฅผ ๋บ์ ๋์ ์ ๋ต ๊ฐ์)
return solution(numbers[1:], target-numbers[0]) + solution(numbers[1:], target+numbers[0])
โ product๋ฅผ ์ด์ฉํ ์์ ํ์ ํ์ด
from itertools import product
def solution(numbers, target):
_list = [(x, -x) for x in numbers]
s = list(map(sum, product(*_list)))
return s.count(target)
728x90
'Algorithm > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค / Python] ๋จ์ด ๋ณํ (0) | 2021.03.31 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค / Python] ๋คํธ์ํฌ (0) | 2021.03.31 |
[ํ๋ก๊ทธ๋๋จธ์ค / C++] ์ง๊ฒ๋ค๋ฆฌ (0) | 2021.02.02 |
[ํ๋ก๊ทธ๋๋จธ์ค / C++] ๋จ์์นด๋ฉ๋ผ (0) | 2021.02.01 |
[ํ๋ก๊ทธ๋๋จธ์ค / C++] ์ฌ ์ฐ๊ฒฐํ๊ธฐ (0) | 2021.01.26 |