문제
https://www.acmicpc.net/problem/1182
1182번: 부분수열의 합
첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다.
www.acmicpc.net
접근
백트래킹으로 모든 경우의 수의 합을 구해준다.
합이 s와 같으면 answer ++ 해서 부분수열의 갯수를 구해주먄된당
코드
n, s = map(int ,input().split())
number = list(map(int ,input().split()))
answer = 0
def dfs(i,total,number,visited):
global answer,n,s
if total == s:
answer += 1
for j in range(i+1,n):
if visited[j] == 0:
visited[j] = 1
dfs(j, total+number[j],number,visited)
visited[j] = 0
for i in range(n):
visited = [0]*n
visited[i] = 1
dfs(i,number[i],number,visited)
print(answer)
'Algorithm' 카테고리의 다른 글
[python] HackerRank - Sherlock and the Valid String (0) | 2023.05.20 |
---|---|
[python] HackerRank - Climbing the Leaderboard (0) | 2023.05.18 |
[python] 프로그래머스 level2 구명보트 / 그리디 (0) | 2023.05.12 |
[python] 프로그래머스 level2 큰 수 만들기 / 그리디 (0) | 2023.05.12 |
[python] 프로그래머스 level3 여행경로 / DFS/BFS (0) | 2023.05.11 |