[백준/파이썬] 1182번 부분수열의 합 풀이

업데이트:



문제 정보


풀이

문제

정수 수열에서 공집합이 아닌 부분수열의 합이 S가 되는 경우의 수를 구하는 문제입니다.

코드

n, s = tuple(map(int, input().split()))
nums = list(map(int, input().split()))

cnt = 0

def sumOfSubset(index, sos):
    if(index >= n):
        return

    global cnt
    sos += nums[index]
    cnt += 1 if sos == s else 0
    
    sumOfSubset(index+1, sos)
    sumOfSubset(index+1, sos-nums[index])

sumOfSubset(0, 0)
print(cnt)

설명

각 인덱스에서 현재 원소를 선택/비선택하는 재귀 분기를 만듭니다.

  • 선택: 합(sos)에 현재 값을 더함
  • 비선택: 더했던 값을 다시 빼고 다음 인덱스로 진행

재귀 탐색 중 합이 S가 되는 경우를 카운트해 출력합니다.



댓글남기기