[백준 완전탐색] 부분수열의 합(python)

이진규·2022년 8월 27일
1

백준(PYTHON)

목록 보기
83/115

문제

https://www.acmicpc.net/problem/1182

나의 코드

"""

"""

from sys import stdin
input = stdin.readline

n, s = map(int, input().split())
num = list(map(int, input().split()))
answer = 0
tmp = []

def backtrack(idx, dep):
    global answer

    if len(tmp) >= 1 and sum(tmp) == s: # s가 0일때 빈 배열의 합은 0이므로 그 경우를 제외하기 위해 len(tmp) >= 1 추가
        answer += 1

    if dep == n:
        return

    for i in range(idx, len(num)): # 백트래킹을 통해 조합 구현
        tmp.append(num[i])
        backtrack(i+1, dep+1)
        tmp.pop()

backtrack(0, 0)
print(answer)

    

다른 풀이 코드

  • 조합 라이브러리를 이용해서 반복문을 통해 해결 - 훨씬 깔끔하고 가독성 있음!
"""

"""

from itertools import combinations
from sys import stdin
input = stdin.readline

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

for i in range(1, n+1):
    lst = list(combinations(nums, i))

    for x in lst:
        if sum(x) == s:
            cnt += 1

print(cnt)

    

설명

조합을 통해 구현하면 되는 문제.

참고 자료

profile
항상 궁금해하고 공부하고 기록하자.

0개의 댓글