알고리즘/백준
[백준] 1182번: 부분수열의 합 / 파이썬
홍우진
2025. 1. 30. 23:31
728x90
반응형
문제 링크
https://www.acmicpc.net/problem/1182
풀이 코드
n, s = map(int, input().split())
num = list(map(int, input().split()))
cnt = 0
dap = []
def hap(inp):
global cnt
if sum(dap) == s and dap:
cnt += 1
for i in range(inp, n):
dap.append(num[i])
hap(i+1)
dap.pop()
hap(0)
print(cnt)
코드 해석
재귀함수를 사용한다.
dap이라는 빈 리스트를 만든 뒤
리스트에 숫자들을 넣는다.
만약 리스트의 합이 s와 같다면 cnt + 1을 한다.
n = 5, s = 0, num = [-7,-3,-2,5,8] 이라면 dap은 다음과 같다.
[-7]
[-7, -3]
[-7, -3, -2]
[-7, -3, -2, 5]
[-7, -3, -2, 5, 8]
[-7, -3, -2, 8]
[-7, -3, 5]
[-7, -3, 5, 8]
[-7, -3, 8]
[-7, -2]
[-7, -2, 5]
[-7, -2, 5, 8]
[-7, -2, 8]
[-7, 5]
[-7, 5, 8]
[-7, 8]
[-3]
[-3, -2]
[-3, -2, 5]
[-3, -2, 5, 8]
[-3, -2, 8]
[-3, 5]
[-3, 5, 8]
[-3, 8]
[-2]
[-2, 5]
[-2, 5, 8]
[-2, 8]
[5]
[5, 8]
[8]
체감 난이도: ★★★★☆
이해가 어려워서 해석 보고 풀었다..
728x90
반응형