Python Algorithm class (Divide and Conquer) 주식 매매 문제
주식 매매 문제 - 분할과 정복
문제 : 어떤 회사의 주식 가격이 날짜 별로 n개 주어져 있다. 한 번 주식을 사서 한 번 팔 수 있다고 하자. 얻을 수 있는 최대 이득을 구하는 프로그램을 작성하시오.
ex) [30, 25, 50, 10, 40, 15, 80, 5, 60, 65]일 때, 최대 이득은 70이다.
방법 1. 반복을 통한 해결 O(N^2)
방법 2. 분할과 정복을 통한 해결 O(log N)
- 입력을 반으로 나눈다.
- 왼쪽 반의 해(leftSol)를 구하고, 오른쪽 반의 해(rightSol)를 구한다.
- 주어진 입력에 대한 해는 max(leftSol, rightSol, 오른쪽 반 최댓값 - 왼쪽 반 최솟값)
Algorithm maxProfit(price, left, right):
// 리스트(배열) price의 left 위치에서 right 위치까지 원소들에 대하여
// 반환값 : profit(최대이득), minimum, maximum
if (left == right):
maxProfit = 0
minimum = maximum = price[left]
else:
mid = (left + right) / 2 // 2로 나눈 몫
leftSol, l_min, l_max = maxProfit(price, left, mid)의 profit, minimum, maximum
rightSol, r_min, r_max = maxProfit(price, mid+1, right)의 profit, minimum, maximum
solCandidate = r_max - l_min
profit = max(leftSol, rightSol, solCandidate)
minimum = min(l_min, r_min)
maximum = max(l_max, r_max)
return profit, minimum, maximum
main에서 maxProfit(price, 0, n-1)을 호출 (n은 원소의 개수)
Author And Source
이 문제에 관하여(Python Algorithm class (Divide and Conquer) 주식 매매 문제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@nathan29849/Python-Algorithm-class-Divide-and-Conquer-주식-매매-문제저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)