인프런 김태원님의 파이썬 알고리즘 문제풀이를 듣고 작성한 글입니다.
https://inf.run/8dBY
파이썬 알고리즘 문제풀이 (코딩테스트 대비) - 인프런 | 강의
파이썬을 이용한 코딩테스트 문제풀이를 합니다., - 강의 소개 | 인프런...
www.inflearn.com
#강의 풀이
def DFS(L, sum):
if sum > total//2:
return
if L == n:
if sum==(total-sum):
print("YES")
sys.exit(0)
else:
DFS(L+1, sum+a[L])
DFS(L+1, sum)
if __name__ == "__main__":
n = int(input())
a = list(map(int, input().split()))
total = sum(a)
DFS(0, 0)
print("NO")
DFS로 왼쪽, 오른쪽을 번갈아가면서
한쪽은 값을 더하고
한쪽은 더하지않는 방식으로
모든 부분집합의 합을 계산할 수 있다.
나는 처음에 DFS 함수안에서 if sum == (totall//2) 를 해도 된다고 생각했으나
DFS 함수안에서 if sum == (total-sum) 을 하는 이유는
total의 값이 홀수이고 (ex 11) sum의 값이 6이면
sum = 5, total-sum = 6 으로 다르지만
sum = 5, total//2 = 5 으로 같을 수 있다.
'알고리즘 (Python)' 카테고리의 다른 글
중복순열 구하기(DFS) (0) | 2022.04.02 |
---|---|
바둑이 승차 (Cut Edge Tech) (0) | 2022.04.01 |
부분집합 구하기 (DFS) (0) | 2022.04.01 |
응급실(큐) (0) | 2022.03.30 |
후위 표기식 만들기(스택) (0) | 2022.03.30 |
댓글