728x90
728x90
ํ์ด1
- DFS ๋ฅผ ์ด๋ป๊ฒ ์ด์ฉํ ์ง ๊ฐ์ด ์์์ ๋นํจ์จ์ ์ผ๋ก ํ์ด๋ฒ๋ ธ๋ค.
- ๊ฐ๋ฅํ ์ผ์ด์ค๋ฅผ ์ ๋ถ ๊ณ ๋ คํด์ ๊ตฌํ
- itertools.product ์ด์ฉํด์ ๊ณฑ์งํฉ ๊ตฌํ๊ธฐ
solution ํจ์์ ํ๋ผ๋ฏธํฐ์ ๋ฆฌํด๊ฐ์ ๋ค์๊ณผ ๊ฐ๋ค.
- numbers : ์ฌ์ฉํ ์ ์๋ ์ซ์๊ฐ ๋ด๊ธด ๋ฐฐ์ด
- target : ํ๊ฒ ๋๋ฒ
- return : ์ซ์๋ฅผ ์ ์ ํ ๋ํ๊ณ ๋นผ์ ํ๊ฒ ๋๋ฒ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์
์์ธํ ํ์ด๋ ๋ค์๊ณผ ๊ฐ๋ค.
- product ํจ์๋ฅผ ํตํด ๊ฐ๋ฅํ case ๊ตฌํ๊ธฐ (cases ์์๋ ๊ทธ๋ฆผ ์ฐธ๊ณ )
- ๋ง์ ๊ณผ ๋บ์ ์ฐ์ฐ์ ํ ์ ์์ผ๋ฏ๋ก [-1, 1] ์ ๊ณฑํ๋ ๊ฐ์ด๋ผ๊ณ ์๊ฐํ๋ค.
- length ๋งํผ ๋ฐ๋ณตํ๋ฉฐ case[i] * numbers[i] ๋ฅผ ๋ํ ๊ฐ์ด target ๊ณผ ๊ฐ์ผ๋ฉด count ๋ฅผ ์ฆ๊ฐ์์ผฐ๋ค.
from itertools import product
def solution(numbers, target):
length = len(numbers)
# ์ ์ฒด ๊ฐ๋ฅํ case ๊ตฌํ๊ธฐ
cases = []
for _ in range(length):
cases.append([-1, 1])
cases = list(product(*cases))
# target ์ธ ๊ฒฝ์ฐ๋ง count ํ๊ธฐ
count = 0
for case in cases:
s = 0
for i in range(length):
s += case[i] * numbers[i]
if s == target:
count += 1
return count
print(solution([1, 1, 1, 1, 1], 3))
ํ์ด2
- ํ๋ก๊ทธ๋๋จธ์ค์ DFS ๋ฅผ ์ด์ฉํ ํ์ด๋ฅผ ์ฐธ๊ณ ํ๋ค.
- ํ์ฌ ๊ฐ์ ๋ํ๊ฑฐ๋ ๋นผ๋ ๊ณผ์ ์์ DFS ๋ฅผ ๊ฐ๊ฐ ํธ์ถํ๋ค.
- ๋ํ ๊ฐ์ ํตํด DFS ์ฌ๊ทํธ์ถ
- ๋บ ๊ฐ์ ํตํด DFS ์ฌ๊ท ํธ์ถ
- index ๋ฅผ ๊ณ์ฐํด ๋ง์ง๋ง ๊ฐ์ ๋ํ์ ๋ ์ข ๋ฃ๋๋๋ก ํ๋ค.
- ์ข ๋ฃ๋๊ธฐ ์ ์ ๋ํ ๊ฐ์ด target ๊ณผ ๊ฐ์ผ๋ฉด answer ์ฆ๊ฐ
answer = 0
def dfs(idx, numbers, target, value):
global answer # ์ ์ญ๋ณ์ ์ฌ์ฉํ๋ค๋ ์ ์ธ
length = len(numbers)
# ์ ๋ถ ๋ค ๊ณ์ฐํ์ ๋ target ๊ณผ ๊ฐ์ ๊ฒฝ์ฐ, ์ ๋ต
if(idx == length and target == value):
answer += 1
return
# ์ ๋ถ ๋ค ๊ณ์ฐํ์ ๋ target ๊ณผ ๋ค๋ฅธ ๊ฒฝ์ฐ,
if(idx == length):
return
# ํ์ฌ ๊ฐ์ ๋ํ๊ฑฐ๋ ๋นผ์ value ๋ก ์ค์ , ๋ค์ index ๊ณ์ฐ์ ์ํด dfs ๋ฐ๋ณต
dfs(idx+1, numbers, target, value+numbers[idx])
dfs(idx+1, numbers, target, value-numbers[idx])
def solution(numbers, target):
global answer # ์ ์ญ๋ณ์ ์ฌ์ฉํ๋ค๋ ์ ์ธ
dfs(0, numbers, target, 0)
return answer
print(solution([1, 1, 1, 1, 1], 3))
์ด๋ฒ ๋ฌธ์ ๋ฅผ ํ๋ฉด์
- ๋นํจ์จ์ ์ผ์ง๋ผ๋ ์ฒซ๋ฒ์งธ ํ์ด๋ ์ค์ค๋ก ํ์ด๋ณด๋๋ก ํ๋ค.
- ์ ๋ต์ด๋๋ผ๋ ๋ค๋ฅธ ์ฌ๋์ ํ์ด๋ฅผ ๋ณด๋ฉด์ ์ฝ๋๋ฅผ ๊ณ ์ณ๋๊ฐ์.
- DFS / BFS ๊ด๋ จ ๋ฌธ์ ๋ฅผ ๋ ํ์ด๋ณด์.
728x90
728x90
'๐ Algorithm > ์๊ณ ๋ฆฌ์ฆ-Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ/Python] ํ๋ก๊ทธ๋๋จธ์ค - ์์ฅ (ํด์) (0) | 2021.03.11 |
---|---|
[์๊ณ ๋ฆฌ์ฆ/Python] ํ๋ก๊ทธ๋๋จธ์ค - ๋คํธ์ํฌ (DFS) (0) | 2021.03.06 |
[์๊ณ ๋ฆฌ์ฆ/Python] BOJ 1158 - ์์ธํธ์ค ๋ฌธ์ (๊ธฐ์ด ์๋ฃ๊ตฌ์กฐ) (2) | 2021.03.06 |
[์๊ณ ๋ฆฌ์ฆ] Day3 - 1967๋ฒ ํธ๋ฆฌ์ ์ง๋ฆ (0) | 2018.08.08 |
[์๊ณ ๋ฆฌ์ฆ] Day3 - 2309๋ฒ ์ผ๊ณฑ ๋์์ด (0) | 2018.08.08 |