아이디어
- 재귀를 이용해 모든 부분 수열을 만들고 S가 되는 집합을 찾자
풀이 및 해설(주석)
N, S = map(int, input().split())
arr = list(map(int, input().split()))
result = []
# dfs를 사용하여 모든 부분 수열을 만들어서 result에 저장
def dfs(index, path):
global result
result.append(path)
for i in range(index, N):
dfs(i+1, path+[arr[i]])
dfs(0, [])
ans = 0
for i in range(len(result)):
# 부분 수열이 []으로 빈 리스트도 포함되어서 sum([])은 0이 되어버림 그래서 조건 추가
if len(result[i])>0 and sum(result[i]) == S:
ans += 1
print(ans)
'백준' 카테고리의 다른 글
백준 2108 통계학 Counter 사용 (파이썬) (0) | 2022.09.25 |
---|---|
백준 10451 순열 사이클 (파이썬) (0) | 2022.09.25 |
백준 1759 암호 만들기 (0) | 2022.09.24 |
백준 2146 다리 만들기 (파이썬) (0) | 2022.09.24 |
백준 1918 후위 표기식 (파이썬) (0) | 2022.09.20 |