728x90
문제 설명
이진 트리를 사용하여 해당 정수를 더할지 말지를 정했다. 이진 트리에서 왼쪽으로 가면 정수를 더하지 않는 것이고 오른쪽으로 가면 정수를 더하는 방식으로 생각했다.
cur은 현재 depth을 뜻하고 total은 수열의 합을 뜻한다. cur이 depth인 S와 같아졌을 때 해당 수열의 합이 N과 같으면 count를 1 더하고 함수를 종료한다. cur이 height보다 작을 경우 이진 트리의 왼쪽으로 갈 경우와 오른쪽으로 갈 경우를 나누어 함수를 호출한다.
전체 코드
arr = []
count = 0
N = 0
S = 0
def func(cur,total):
global count
global N
global arr
global S
if cur == S:
if total == N:
count += 1
return
func(cur+1,total)
func(cur+1,total+arr[cur])
return
def main():
global arr
global count
global N
global S
tmp = list(map(int,input().split()))
S = tmp[0]
N = tmp[1]
arr = list(map(int,input().split()))
func(0,0)
if N == 0:
count -= 1
print(count)
return
if __name__ == "__main__":
main()전체 코드
728x90
반응형
'코딩테스트 > 파이썬' 카테고리의 다른 글
백준 15683번 감시 (0) | 2021.02.06 |
---|---|
백준 1799번 비숍 (0) | 2021.02.04 |
백준 9663번 N-Queen (0) | 2021.02.02 |
백준 1780번 종이의 개수 (0) | 2021.02.01 |
백준 2630번 색종이 만들기 (0) | 2021.01.31 |