๋ฌธ์
ํ๋ก๊ทธ๋๋จธ์ค ํ๊ฒ ๋๋ฒ
https://school.programmers.co.kr/learn/courses/30/lessons/43165
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
์ฝ๋
answer = 0
def dfs(numbers, target, result, idx):
global answer
# ์ข
๋ฃ์กฐ๊ฑด
if idx == len(numbers):
if result == target:
answer += 1
return
else:
return
# ๋ํ์๋
dfs(numbers, target, result + numbers[idx], idx + 1)
# ๋บ์๋
dfs(numbers, target, result - numbers[idx], idx + 1)
def solution(numbers, target):
global answer
dfs(numbers, target, 0, 0)
return answer
ํ์ด
์์ฝ
DFS๋ฅผ ์ด์ฉํด ํ์๋ค.
ํด๋น ์ซ์๋ฅผ ์ฐ์ฐ ํ ๋๋ง๋ค idx += 1 ํด์ idx๊ฐ ์ซ์์ ์ด ๊ฐ์์ ๊ฐ์์ง๋ฉด ์ฐ์ฐ ๊ฒฐ๊ณผ์ ํ๊ฒ ๋ฒํธ๊ฐ ๊ฐ์์ง ํ๋จํ์ฌ ํ๊ฒ ๋ฒํธ์ ๊ฐ๋ค๋ฉด ์ ๋ด += 1 ํ๋๋ก ํ๋ค.
def dfs(numbers, target,result, idx):
number๋ ๋ฌธ์ ์์ ์ฃผ์ด์ง๋ ์ซ์๋ฐฐ์ด
target์ number ๋ฐฐ์ด์ ์ซ์๋ค์ ๋ํ๊ณ ๋นผ์ ๋ง๋ค์ด์ผํ๋ ๋ชฉํ ์ซ์
result๋ numbers ๋ฐฐ์ด์ ์ซ์๋ค์ ๋ํ๊ณ ๋นผ์ ๋ง๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ๊ฒฐ๊ณผ ์ซ์
idx๋ ๊น์ด๋ฅผ ๋ํ๋ธ๋ค. ์ซ์๋ฅผ ๋ํ๊ณ ๋นผ๋ ์์ ์ ํ ๋๋ง๋ค idx += 1 ํ์ฌ ๊น์ด๋ฅผ 1์ฉ ๋๋ ค๊ฐ๋ค.
global answer
answer๋ ํจ์ ์ธ๋ถ์ ์๋ ๋ณ์์ด๊ธฐ๋๋ฌธ์ ํจ์ ์์์ ์ธ๋ ค๋ฉด global ์ ์ธ์ ํด์ฃผ์ด ์ ์ญ ๋ณ์๋ก ์ฌ์ฉํด์ผํ๋ค.
- ์ง์ญ ๋ณ์ : ํจ์๊ฐ ๋๋ ๋ ํจ์ ๋ด๋ถ์์ ์ ์ธํ๋ ๋ณ์๋ ๊ฐ์ด ์ฌ๋ผ์ง๋ค. ์ด๋ฐ ๋ณ์๋ฅผ ์ง์ญ๋ณ์ ๋ผ๊ณ ํ๋ค.
- ์ ์ญ ๋ณ์ : ํจ์ ๊ฐ ๋๋ ๋๋ ์ฌ๋ผ์ง์ง ์๋ ๋ณ์๊ฐ ์๋ค. ์ด๋ฅผ ์ ์ญ ๋ณ์๋ผ๊ณ ํ๋ค. ํ์ง๋ง ์ ์ญ๋ณ์๋ ํ๋ก๊ทธ๋จ์ด ๋ณต์กํด์ง์๋ก ๊ณจ์นซ๊ฑฐ๋ฆฌ๊ฐ ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ ์ง์ญ๋ณ์์ ์ ์ญ๋ณ์๋ฅผ ์ ์ ํ ์ฌ์ฉํด์ผํ๋ค.
# ์ข
๋ฃ์กฐ๊ฑด
if idx == len(numbers):
if result == target:
answer += 1
return
else:
return
๊น์ด(idx)๊ฐ ์ซ์์ ์ด ๊ฐ์์ ๊ฐ์์ง๋ค๋ฉด, ๊ฒฐ๊ณผ ์ซ์๊ฐ ํ๊ฒ์ซ์์ ๊ฐ์์ง ๋น๊ตํ๋ค.
๊ฒฐ๊ณผ์ซ์์ ํ๊ฒ์ซ์๊ฐ ๊ฐ๋ค๋ฉด answer += 1 ํ ์ง๊ธ ๊น์ด๋ณด๋ค -1 ํ ๊ณณ์ผ๋ก return ํ๋ค.
๊ฒฐ๊ณผ์ซ์์ ํ๊ฒ์ซ์๊ฐ ๊ฐ์ง ์๋ค๋ฉด ์๋ฌด์์ ์์ด ์ง๊ธ ๊น์ด๋ณด๋ค -1 ํ ๊ณณ์ผ๋ก return ํ๋ค.
# ๋ํ์๋
dfs(numbers,target, result + numbers[idx], idx + 1)
๋ํ๊ธฐ ์ฐ์ฐ์ ํ์๋ ํด๋น ์ซ์(number[idx])๋ฅผ ์ง๊ธ ๊ฒฐ๊ณผ์ซ์์ ๋ํ๊ณ ๊น์ด(idx)๋ฅผ 1 ๋ํ๋ค.
# ๋บ์๋
dfs(numbers, target, result - numbers[idx], idx + 1)
๋นผ๊ธฐ ์ฐ์ฐ์ ํ์๋ ํด๋น ์ซ์(number[idx])๋ฅผ ์ง๊ธ ๊ฒฐ๊ณผ์ซ์์ ๋นผ๊ณ ๊น์ด(idx)๋ฅผ 1 ๋ํ๋ค.
def solution(numbers, target):
dfs(numbers, target, 0, 0)
return answer
solution()์์ dfs()๋ฅผ ํตํด ๊ตฌํ answer์ ๋ฐํํ๋ค.
๋ค๋ฅธ์ฝ๋
answer = 0
def solution(numbers, target):
def dfs(result, idx):
global answer
if idx == len(numbers):
if result == target:
answer += 1
return
else:
return
# ๋ํ์๋
dfs(result + numbers[idx], idx + 1)
# ๋บ์๋
dfs(result - numbers[idx], idx + 1)
dfs(0, 0)
return answer
๊ฐ์ ํ ์คํฐ๋์์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์ฌ ๋ด ์ฝ๋๋ฅผ ๋ฐ๊ฟ๋ณด์๋ค.
ํ์ด
dfs()๋ฅผ solution()ํจ์ ์์ ๋ฃ์๋ค.
dfs ์๋ ๋ฐฉ์์ ์ ๊ณผ ๋์ผํ๋ค.
dfs()๋ฅผ solution()ํจ์ ์์ ๋ฃ์ผ๋ dfs()์ ์ฐ์ผ ๋งค๊ฐ ๋ณ์๊ฐ ์ ์ด์ง๊ณ , ์ฝ๋ ์คํ์๋๊ฐ ๋นจ๋ผ์ก๋ค.
์ฝ๋์ ์คํ์๋๊ฐ ๋นจ๋ผ์ง ์ด์ ๋ ์ธ๊ฐ์ง๋ค.
- ํจ์ ๋งค๊ฐ๋ณ์ ๊ฐ์ : ๋งค๊ฐ ๋ณ์๊ฐ ์ค์ด๋ค๋ฉด ํจ์ ํธ์ถ์ ์ ๋ฌํด์ผํ๋ ๋ฐ์ดํฐ์์ด ์ ์ด์ง๋ค.
- ๋ด๋ถ ํจ์ ์ฌ์ฉ : ํจ์๊ฐ ํ์ํ ํจ์๋ฅผ ์ ์ญ ์ค์ฝํ๊ฐ ์๋ ๋ก์ปฌ ์ค์ฝํ์์ ์ง์ ์ฐธ์กฐ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ ์ญ๋ณ์๋ฅผ ์ฌ์ฉํ ๋๋ณด๋ค ์ ๊ทผ์ด ํธ๋ฆฌํด์ง๋ค.
- ์ ์ญ ๋ณ์ ์ ๊ทผ ๊ฐ์ : ์ ์ญ๋ณ์ answer์ ์ ๊ทผํ๋ ํ์๊ฐ ์ค์ด๋ค์ด ์ค๋ฒํค๋๊ฐ ๊ฐ์ํ๋ค.
์คํฐ๋์์ ์ฝ๋๋ answer๋ฅผ ์ ์ญ๋ณ์ ์ฒ๋ฆฌ๊ฐ ์๋ ์ฃผ์ํํ๋ก ๋ฐ๊พธ์ด ์ ๊ทผํ๋ ๋ฐฉ์์ด๋ค.
ํจ์์ ํจ์(์ฒ์ ์ฝ๋)
ํ
์คํธ 1 ใ ํต๊ณผ (571.88ms, 10.1MB)
ํ
์คํธ 2 ใ ํต๊ณผ (584.73ms, 10.2MB)
ํ
์คํธ 3 ใ ํต๊ณผ (0.66ms, 10.4MB)
ํ
์คํธ 4 ใ ํต๊ณผ (1.40ms, 10.2MB)
ํ
์คํธ 5 ใ ํต๊ณผ (15.73ms, 9.98MB)
ํ
์คํธ 6 ใ ํต๊ณผ (1.13ms, 10.3MB)
ํ
์คํธ 7 ใ ํต๊ณผ (0.38ms, 10.1MB)
ํ
์คํธ 8 ใ ํต๊ณผ (5.52ms, 10.2MB)
ํจ์์ ํจ์(์คํฐ๋์ ์ฝ๋ ์ฐธ๊ณ )
ํ
์คํธ 1 ใ ํต๊ณผ (370.24ms, 10.2MB)
ํ
์คํธ 2 ใ ํต๊ณผ (391.46ms, 10.1MB)
ํ
์คํธ 3 ใ ํต๊ณผ (0.38ms, 10.3MB)
ํ
์คํธ 4 ใ ํต๊ณผ (1.61ms, 10.2MB)
ํ
์คํธ 5 ใ ํต๊ณผ (14.57ms, 10MB)
ํ
์คํธ 6 ใ ํต๊ณผ (1.08ms, 10.3MB)
ํ
์คํธ 7 ใ ํต๊ณผ (0.36ms, 10.3MB)
ํ
์คํธ 8 ใ ํต๊ณผ (2.98ms, 10.2MB)
์๋กญ๊ฒ ๋ฐฐ์ด์ /๋๋์
- ๋ด๋ถํจ์๋ก ๋ฐ๊พธ๋ฉด ์คํ์๋๊ฐ ๋นจ๋ผ์ง๋ค๋๊ฒ์ ์๊ฒ ๋์๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ค ์์ธ๋ค์ด ์คํ์๋๋ฅผ ๋น ๋ฅด๊ฒ ๋ง๋๋์ง๋ ์๊ฒ ๋์๋ค.
- ์ ์ญ๋ณ์ ์ฒ๋ฆฌ ๋์ ๋ฆฌ์คํธ๋ก ์ฃผ์ํํ๋ก ์ ๊ทผํ ์ ์๋ค๋๊ฒ์ ์๊ฒ ๋์๋ค.
๋ ๋์ ์๊ฒฌ์ด๋ ๊ถ๊ธํ์ ๊ฒ ์๋ค๋ฉด ํธํ๊ฒ ๋๊ธ ๋ฌ์์ฃผ์ธ์ :)
'์ฝ๋ฉํ ์คํธ๐ก' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] ์ซ์์นด๋2 (0) | 2024.06.14 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ์ ๊ตญ์ฌ์ฌ (0) | 2024.06.10 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์นดํซ (0) | 2024.05.28 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ฐ์ฅ ํฐ ์ (0) | 2024.05.26 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์ฌ๋ฐ๋ฅธ ๊ดํธ (0) | 2024.05.23 |