홍우진의 개발 일기장
[백준] 1182번: 부분수열의 합 / 파이썬 본문
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
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 9237번: 이장님 초대 / 파이썬 (0) | 2025.02.01 |
---|---|
[백준] 15650번: N과 M (2) / 파이썬 (0) | 2025.01.31 |
[백준] 2740번: 행렬 곱셈 / 파이썬 (0) | 2025.01.29 |
[백준] 4659번: 비밀번호 발음하기 / 파이썬 (0) | 2025.01.28 |
[백준] 14031번: 줄세우기 / 파이썬 (0) | 2025.01.27 |
Comments