๋ฌธ์ :
N๊ฐ์ ์์๋ก ๊ตฌ์ฑ๋ ์์ฐ์ ์งํฉ์ด ์ฃผ์ด์ง๋ฉด, ์ด ์งํฉ์ ๋ ๊ฐ์ ๋ถ๋ถ์งํฉ์ผ๋ก ๋๋์์ ๋
๋ ๋ถ๋ถ์งํฉ์ ์์์ ํฉ์ด ์๋ก ๊ฐ์ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํ๋ฉด “YES"๋ฅผ ์ถ๋ ฅํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด
”NO"๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์ธ์.
๋๋ก ๋๋๋ ๋ ๋ถ๋ถ์งํฉ์ ์๋ก์ ์งํฉ์ด๋ฉฐ, ๋ ๋ถ๋ถ์งํฉ์ ํฉํ๋ฉด ์
๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์๋์
์งํฉ์ด ๋์ด ํฉ๋๋ค.
์๋ฅผ ๋ค์ด {1, 3, 5, 6, 7, 10}์ด ์
๋ ฅ๋๋ฉด {1, 3, 5, 7} = {6, 10} ์ผ๋ก ๋ ๋ถ๋ถ์งํฉ์ ํฉ์ด16์ผ๋ก ๊ฐ์ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํ๋ ๊ฒ์ ์ ์ ์๋ค.
์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค. (๋ค๋ฅธ ์ฌ๋์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์์ต๋๋ค.)
import sys
def DFS(L, sum):
if sum>total//2:
return
if L==n:
if sum==(total-sum):
print("YES")
sys.exit(0)
else:
DFS(L+1, sum+a[L])
DFS(L+1, sum)
n=int(input())
a=list(map(int, input().split()))
total=sum(a)
DFS(0, 0)
print("NO")
DFS, BFS๋ฅผ ๊ณต๋ถํ์ง๋ง, ๋ง์ ์ด๋ฐ ๋ฌธ์ ๊ฐ ๋์ค๋ฉด ์ ์ฉ ๋ชป ํ ๊ฒ ๊ฐ๋ค.. ๊ทธ๋งํผ ์์ง ํ์ด๋ณธ ๋ฌธ์ ๊ฐ ์ ๋ค๋๊ฑฐ๊ฒ ์ง..
์ ์๊ณ ๋ฆฌ์ฆ์ ํ์คํ๊ฒ ์ดํดํ๊ธฐ ์ํด ๋ฐ๋ก ์ ๋ฆฌํด๋ณด์๋ค.
์ธ๋ฑ์ค๋ฅผ 1์ฉ ๋๋ ค๊ฐ๋ฉฐ DFSํจ์๋ฅผ ์คํํด ๋ชจ๋ ๊ฐ์ ํ์ํ๋ค.
DFS ์คํํ๋ ๊ฒฝ์ฐ๋ 2๊ฐ์ง๋ก ๋๋๋๋ฐ, ๊ทธ ์ธ๋ฑ์ค๋ฅผ ์ ํํ์ ๋์ ์ ํํ์ง ์์์ ๋๋ก ๋๋๋ค.
๊ทธ๋ฆฌ๊ณ sum ๊ฐ์ด total//2 ๋ณด๋ค ํฌ๋ฉด returnํด์ฃผ์ด ๋น ์ ธ๋์จ๋ค. ๊ตณ์ด ์ด ์กฐ๊ฑด๋ฌธ์ด ์์ด๋ ๋ต์ ์ฐพ๋๋ฐ ๋ฌธ์ ๋ ์์ง๋ง, n์ด ํฌ๋ฉด ํด์๋ก ์๊ฐ์ ๋์ฑ ์ค์ผ ์ ์์ ๊ฒ์ด๋ค.
L == n (์ข ๋ฃ ์ง์ ์ธ ๊ฒฝ์ฐ) and sum == total-sum (๋ถ๋ถ ์งํฉ์ ํฉ์ด ์ดํฉ์์ ๋ถ๋ถ์งํฉ์ ํฉ์ ๋บ ๋๋จธ์ง์ ๊ฐ์ ๊ฒฝ์ฐ)์ YES๋ฅผ ์ถ๋ ฅํด์ฃผ๊ณ ์ข ๋ฃํด์ฃผ๋ฉด ๋๋ค.
์์ง ์ค๋ ฅ์ ๋ถ์กฑํ์ง๋ง ์ฌ๋ฏธ๋ ์๋ ๊ฒ ๊ฐ๋ค.. ์ผ๋ฅธ ์ด๋ ค์ด ๋ฌธ์ ๋ฅผ ํ์ด ํฌ์ด ๋๋ผ๊ณ ์ถใท..
from itertools import combinations
from itertools import chain
lst = [10,20,30,40]
ans = []
for i in range(1,5):
ans.append(list(map(list,combinations(lst, i))))
ans = list(chain(*ans))
print(ans)
res = []
for i in range(len(ans)):
for j in range(i+1, len(ans)):
if len(set(ans[j]) & set(ans[i])) == 0:
if sum(ans[i]) == sum(ans[j]):
print(i,ans[i], ans[j])
res.append(sum(ans[i]))
print(res)
'๋์ ๋์ ์ฝ๋ฉ์ผ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ค๋ต๋ ธํธ (p3 ์ต๋ํ๋ถํฐ ๋ค์ ํ๊ธฐ) (0) | 2023.01.17 |
---|---|
ํ์ด์ฌ hash ์ ๋ฆฌ (0) | 2023.01.13 |
ํ์ ํ๋ ฌ ์ฝ๋ ๊ณต๋ถ (0) | 2023.01.07 |
์ค๋ต๋ ธํธ ์ ๋ฆฌ (2022-8-18~ing) (0) | 2022.08.18 |
<๋ธ๋ฃจ์คํฌ์ค> ๋ฐฑ์ค 7568๋ฒ. ๋ฉ์น (์ค๋ต๋ ธํธ) (0) | 2022.08.12 |