ํ๋ก๊ทธ๋๋จธ์ค [lv2] ํ๊ฒ๋๋ฒ ํ์ด์ฌ
2021. 4. 5. 23:14ใ๐ฑ Algorithm/Else
ํฌ์ธํธ
- ๋ฆฌ์คํธ ๋ด ์์๋ ๋ชจ๋ ๊ฐ๋ค.
- ํ๊ฒ ๋๋ฒ๋ฅผ ๋ง์ถ๋ ๋ฐฉ๋ฒ์ด ** ๋ช๊ฐ์ง** ์ธ์ง๋ง ์๋ฉด ๋๋ค.
์ ํ์ ์ธ ์ฌ๊ท ๋ฌธ์ ๋ก, dfs๋ฅผ ์ด์ฉํ์ฌ ํ ์๋ ์์ง๋ง, itertools๋ผ์ด๋ธ๋ฌ๋ฆฌ์ product๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ pythonicํ ์ฝ๋๋ฅผ ์์ฑํ ์๋ ์๋ค.
ํ์ด 1) product, ๊ณฑ์งํฉ
from itertools import product
def solution(numbers, target):
temp = [(i, -i) for i in numbers]
result = [1 for i in product(*temp) if sum(i) == target]
return len(result)
temp ๋ฅผ ์ถ๋ ฅํ๋ฉด
temp = [(i, -i) for i in numbers]
print(temp)
>>> [(1, -1), (1, -1), (1, -1), (1, -1), (1, -1)]
product๋ฅผ ์ฌ์ฉํ์ฌ temp ์์๋ค์ ๊ณฑ์งํฉ์ ์ถ๋ ฅํ๋ฉด ์ ์ฒด ๊ฒฝ์ฐ์ ์๊ฐ ์ถ๋ ฅ๋๋ค.
for i in product(*temp):
print(i)
>>> (1, 1, 1, 1, 1)
(1, 1, 1, 1, -1)
(1, 1, 1, -1, 1)
(1, 1, 1, -1, -1)
(1, 1, -1, 1, 1)
(1, 1, -1, 1, -1)
...
=> ์ด 32๊ฐ์ง
์ด 32๊ฐ์ง ๊ฒฝ์ฐ์ ์งํฉ ์ค, ์งํฉ์ ์ดํฉ์ด target๊ณผ ๊ฐ์ ์งํฉ์ ๊ฐฏ์๋ฅผ ๊ณ ๋ฅด๋ฉด ๋๋ค. (์ด๋ค ์งํฉ์ด ํ๊ฒ์ ๋ง์ถ๋์ง๋ ์๊ด์๋ค)
๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์ ์ผ๋ก ์กฐ๊ฑด์ ๋ง๋ ๊ฒฝ์ฐ 1์ ๋ฆฌํดํ์ฌ result ๋ฆฌ์คํธ์ ์ ์ฅํ๊ณ , result ๋ฆฌ์คํธ์ ๊ธธ์ด๋ฅผ ๋ต์ผ๋ก ์ถ๋ ฅ.
ํ์ด 2) DFS, ์ฌ๊ท
result = 0
def solution(numbers, target):
global result
dfs(0, numbers, target, 0)
return result
def dfs(idx, numbers, target, curr):
N = len(numbers)
global result
if idx == N and curr == target:
result += 1
return
if idx == N:
return
dfs(idx + 1, numbers, target, curr + numbers[idx])
dfs(idx + 1, numbers, target, curr - numbers[idx])
๊ถ๊ธ์
- DFS ํ์ด์์, numbers[idx] ๋ถ๋ถ์ idx ๋์ 0์ ๋ฃ์ผ๋ ์๋ฌ๊ฐ ๋ฌ๋ค.
- ๋ชจ๋ ๋ฆฌ์คํธ์ ์์๊ฐ ๊ฐ์ผ๋ ๋น์ฐํ idx ๋์ 0์ ๋ฃ์ด๋ ์๊ด์๋ค๊ณ ์๊ฐํ๋๋ฐ, idx๋ฅผ ๋ฃ์ผ๋ ํต๊ณผ, 0์ ๋ฃ์ผ๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
- ์ด์ ๋ฅผ ์์๋ ๋ถ์ ๋๊ธ ๋ถํ๋๋ฆฝ๋๋ค :) ใ
'๐ฑ Algorithm > Else' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค [lv2] ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ ํ์ด์ฌ (0) | 2021.05.15 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค [lv2] ๊ดํธ๋ณํ ํ์ด์ฌ (0) | 2021.04.25 |
ํ๋ก๊ทธ๋๋จธ์ค [lv3] ๋คํธ์ํฌ ํ์ด์ฌ (0) | 2021.04.25 |
ํ๋ก๊ทธ๋๋จธ์ค [lv2] ์คํ์ฑํ ๋ฐฉ ํ์ด์ฌ (0) | 2021.04.25 |
ํ๋ก๊ทธ๋๋จธ์ค [lv3] ๋จ์ด๋ณํ ํ์ด์ฌ (0) | 2021.04.25 |