ํ๊ฒ ๋๋ฒ
๋ฌธ์ ์ค๋ช
n๊ฐ์ ์์ด ์๋ ์ ์๊ฐ ์์ต๋๋ค. ์ด ์๋ฅผ ์ ์ ํ ๋ํ๊ฑฐ๋ ๋นผ์ ํ๊ฒ ๋๋ฒ๋ฅผ ๋ง๋ค๋ ค๊ณ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด [1, 1, 1, 1, 1]๋ก ์ซ์ 3์ ๋ง๋ค๋ ค๋ฉด ๋ค์ ๋ค์ฏ ๋ฐฉ๋ฒ์ ์ธ ์ ์์ต๋๋ค.
-1+1+1+1+1 = 3
+1-1+1+1+1 = 3
+1+1-1+1+1 = 3
+1+1+1-1+1 = 3
+1+1+1+1-1 = 3
ํ์ด1
answer = 0
def calc(index, numbers, target, value):
global answer;
if(index==len(numbers)):
if(value==target):
answer += 1
return
return
calc(index+1, numbers, target, value+numbers[index])
calc(index+1, numbers, target, value-numbers[index])
def solution(numbers, target):
global answer
calc(0, numbers, target, 0)
return answer
ํ์ด์ฌ์์ return์ ํจ์๋ฅผ ๋ฐ๋ก ์ข ๋ฃ์ํค๋ ๋ช ๋ น์ด๋ค.
์ข ๋ฃ์ํค์ง ์๋๋ค๋ฉด, ๋ฌดํ ์ฌ๊ท๋ฅผ ๋ ๊ฒ์ด๋ค.
์ด ํ์ด์ ํต์ฌ์
1. ๋ํ๊ฑฐ๋ ๋บ๋ค๋ ๊ฒ์, ์ด์งํธ๋ฆฌ๋ก ๋ณด๋ ๊ฒ
2. ์ฌ์น์ฐ์ฐ์ ์ ์ฒด ๋ ธ๋์ ๋ฐฉ๋ฌธ์ผ๋ก ๋ณด๋ ๊ฒ
3. ์ธ๋ฑ์ค์ ์ฆ๊ฐ์, ๊ฐ์ด ์ฐ์ฐ์, ๋งค๊ฒ๋ณ์๋ก ์ ๋ฌํ๋ค๋ ๊ฒ
ํ์ด2
def solution(numbers, target):
if not numbers and target ==0 :
reutrn 1
elif not numbers :
return 0
else return solution(numbers[1:],target+numbers[0])+solution(numbers[1:],target-numbers[0])
์ด ํ์ด์ ํต์ฌ์
๋ฐฐ์ด์ ์์๋ฅผ ๋ํ๊ฑฐ๋ ๋บ ๊ฐ์ ํฉ์ด target๊ณผ ๊ฐ๋ค๋ ์์ ์ดํญํ์ฌ
target - sum = 0์ผ๋ก ๋ณธ ๊ฒ.
ํ๋ฃจ ์ง๋ ๋์ ํ์ด
answer = 0
def DFS(numbers, target, value):
global answer;
if not numbers:
if value == target:
answer +=1
return
else :
DFS(numbers[1:], target, value+numbers[0])
DFS(numbers[1:], target, value-numbers[0])
def solution(numbers, target):
global answer;
DFS(numbers, target,0)
return answer
๊ตณ์ด ์ธ๋ฐ์ค๋ฅผ ๋งค๊ฒ๋ณ์๋ก ์ค ํ์ ์๋ค.
numbers[1:]๋ก ์ฌ๊ทํ๋ฉด ๋์ ๋น ๋ฐฐ์ด์ด ๋จ๊ธฐ ๋๋ฌธ์ด๋ค.
1๋ฒ๊ณผ 2๋ฒ์ ์งฌ๋ฝํด์
์ง๊ด์ฑ๊ณผ ๊ฐ๊ฒฐ์ฑ์ ๋ชจ๋ ์ฑ๊ฒผ๋ค.
์ต๋ํ ํ์ด๋ณธ ๋ฌธ์ ๋ฅผ ์ธ์์ ํด๊ฒฐํ๋ ค๊ณ ํ๊ธฐ ๋ณด๋ค,
์ด ๋ฌธ์ ๋ฅผ ์ด๋ค ์ถ์์ ๊ตฌ์กฐ๋ก ํ์์ง๋ฅผ ์๊ฐํ๋ฉฐ ํผ ๊ฒฐ๊ณผ๋ค.
'๐ Python > ๐ค Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 1931๋ฒ ํ์์ค ๋ฐฐ์ (0) | 2021.10.01 |
---|---|
ํ์๋ฒ(Greedy): ์ฒด์ก๋ณต (0) | 2021.09.22 |
์ฌํ๊ฒฝ๋ก: DFDํ์ด (0) | 2021.08.27 |
๋จ์ด๋ณํ: DFS, BFS ํ์ด (0) | 2021.08.26 |
๋คํธ์ํฌ DFS, BFSํ์ด (0) | 2021.08.25 |