๐ ๋ฌธ์ ๋ฐ๋ก๊ฐ๊ธฐ
https://swexpertacademy.com/main/code/problem/problemDetail.do
SW Expert Academy
SW ํ๋ก๊ทธ๋๋ฐ ์ญ๋ ๊ฐํ์ ๋์์ด ๋๋ ๋ค์ํ ํ์ต ์ปจํ ์ธ ๋ฅผ ํ์ธํ์ธ์!
swexpertacademy.com
๐ก์ ๊ทผ ๋ฐฉ๋ฒ
- ๊ฐ์ ํฌํจํ๋ ๊ฒฝ์ฐ, ํฌํจํ์ง ์๋ ๊ฒฝ์ฐ -> 2๊ฐ์ง์ ๊ฒฝ์ฐ์ ์๋ก ๊ฐ๋๊ฐ ๋๋๊ณ ,
- ๊ทธ ๊ฐ๋ ์ค์ K๊ฐ๊ณผ ๊ฐ์ ๊ฐฏ์๋ฅผ ๊ตฌํ๊ธฐ
- ์ฌ๋ฌ ๊ฐ๋๋ก ๋ป์ด๋๊ฐ๋ค -> dfs๋ก ์ ๊ทผ ํด๋ณด์!
- ํฌํจํ๋ ๊ฒฝ์ฐ, ํฌํจํ์ง ์๋ ๊ฒฝ์ฐ -> dfs ์ฌ๊ทํจ์๋ฅผ 2๋ฒ ํธ์ถํด์ ํ๋๋ ํฌํจO, ํ๋๋ ํฌํจX
- sum์ ์ ๋ฌํ๋ฉด์ sum==K์ด๋ฉด
- count +=1 ํ๊ณ , return
๐ค return ์ ์ํ๋ฉด?
return์ ์ ํ๋ฉด ๊ทธ ๊ฐ๋๊ฐ ๋๋์ง ์๊ณ ์ค๋ณต ๊ณ์ฐ์ด ๋๋ค
์๋ฅผ ๋ค์ด data = [1,2,1,2] ์ด๊ณ K=3์ผ๋
1,2,1,2
OO : 1๋ฒ์งธ ์ธ๋ฑ์ค ๋ํ๊ณ ๋ ํ count ++
OOX : 2๋ฒ์งธ ์ธ๋ฑ์ค ์ ๋ํ๊ณ ๋ ํ count++
OOXX : 3๋ฒ์งธ ์ธ๋ฑ์ค ์ ๋ํ๊ณ ๋ ํ count++
OXXO : 3๋ฒ์งธ ์ธ๋ฑ์ค ๋ํ๊ณ ๋ ํ count++
XOO : 2๋ฒ์งธ ์ธ๋ฑ์ค ๋ํ๊ณ ๋ ํ count++
XOOX : 3๋ฒ์งธ ์ธ๋ฑ์ค ์ ๋ํ๊ณ ๋ ํ count++
XXOO : 3๋ฒ์งธ ์ธ๋ฑ์ค ๋ํ๊ณ ๋ ํ count++
return๊ฐ์ ๋ฃ์ง ์์ผ๋ฉด ๊ทธ ์ดํ์๋ ๊ณ์ count++๊ฐ ๋์ด์ ์ค๋ณต์ด ๋์ด 7์ด ๋์จ๋ค
โ return์ ๋ฃ์ผ๋ฉด
1,2,1,2
OO| : 1๋ฒ์งธ ์ธ๋ฑ์ค ๋ํ๊ณ ๋ ํ count ++ return
OOX : 2๋ฒ์งธ ์ธ๋ฑ์ค ์ ๋ํ๊ณ ๋ ํ count++
OOXX : 3๋ฒ์งธ ์ธ๋ฑ์ค ์ ๋ํ๊ณ ๋ ํ count++
OXXO| : 3๋ฒ์งธ ์ธ๋ฑ์ค ๋ํ๊ณ ๋ ํ count++ return
XOO| : 2๋ฒ์งธ ์ธ๋ฑ์ค ๋ํ๊ณ ๋ ํ count++ return
XOOX : 3๋ฒ์งธ ์ธ๋ฑ์ค ์ ๋ํ๊ณ ๋ ํ count++
XXOO| : 3๋ฒ์งธ ์ธ๋ฑ์ค ๋ํ๊ณ ๋ ํ count++ return
์ค๋ณต์ ์ ๊ฑฐํ์ฌ 4๊ฐ ๋์จ๋ค.
๐ก ํ์ด์ฝ๋
def dfs(index, sum = 0):
global count
if sum == K:
count +=1
return #return ์ ํ๋ฉด ๊ทธ ์ดํ data[index] ์ ๋ํ๊ณ ์ด ๊ฐ๋๋ ๋๋จ
if index == N:
return
dfs(index+1, sum + data[index]) #ํฌํจํ ๊ฒฝ์ฐ
dfs(index+1, sum) #ํฌํจํ์ง ์์ ๊ฒฝ์ฐ
tc = int(input())
for i in range(tc):
N, K = map(int, input().split())
count = 0
data = list(map(int,input().split()))
dfs(0)
print('#{} {}'.format(i+1, count))