인프런 김태원님의 파이썬 알고리즘 문제풀이를 듣고 작성한 글입니다.
파이썬 알고리즘 문제풀이 (코딩테스트 대비) - 인프런 | 강의
파이썬을 이용한 코딩테스트 문제풀이를 합니다., - 강의 소개 | 인프런...
www.inflearn.com

#강의 풀이
def DFS(L, sum):
global res
if L > res:
return
if sum > m:
return
if sum == m:
if L < res:
res = L
else:
for i in range(n):
DFS(L+1, sum+a[i])
if __name__ == "__main__":
n = int(input())
a = list(map(int, input().split()))
m = int(input())
res = 2147000000
a.sort(reverse=True)
DFS(0, 0)
print(res)
DFS를 L = level과 sum으로 진행
DFS( L ) 에서 L의 값이 동전의 갯수라고 볼수있다.
시간을 단축하는 cut edge
1. a 배열을 내림차순 sort하여 값이 큰 동전부터 체크한다.
2. L의 최솟값 res보다 커지는 순간 return 한다.
3. 동전의 합 sum이 m보다 커지는 순간 return 한다.
4. 같을때는 L이 최소라면 DFS 순환 후 res 출력
'알고리즘 (Python)' 카테고리의 다른 글
수열 추측하기(순열, 파스칼 응용) (0) | 2022.04.02 |
---|---|
순열 구하기 (DFS) (0) | 2022.04.02 |
중복순열 구하기(DFS) (0) | 2022.04.02 |
바둑이 승차 (Cut Edge Tech) (0) | 2022.04.01 |
합이 같은 부분집합 (DFS) (0) | 2022.04.01 |
댓글