Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬에서 수수료로 주식을 사고팔 때 얻을 수 있는 최대 이익을 찾는 프로그램?

<시간/>

회사의 주가 목록이 시간 순서대로 있고 하나의 판매 거래에 대한 거래 수수료도 있다고 가정합니다. 우리는 그 주식을 여러 번 사고 팔 때 얻을 수 있는 최대 이익을 찾아야 합니다. 판매하기 전에 먼저 구매해야 합니다.

따라서 입력이 가격 =[2, 10, 4, 8] 수수료 =3과 같으면 출력은 6이 됩니다. 2에서 사고 10에서 팔 수 있고 수수료 3이 발생하므로 이익은 5입니다. . 그런 다음 4에 사고 8에 팔고 수수료 3이 발생하므로 이익 1, 총 이익 6입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다.

  • n :=가격의 크기

  • 함수 recur() 를 정의하십시오. 이것은 i:=0 및 플래그 :=0

    을 취합니다.
  • i가 n과 같으면

    • 0 반환

  • 플래그가 거짓이면

    • recur(i + 1, 1)의 최대값을 반환 - 가격[i] 및 recur(i + 1, 0)

  • recur(i + 1, 1) 및 recur(i + 1, 0) + 가격[i]의 최대값을 반환 - 수수료

  • 기본 메소드 호출에서 recur()

더 나은 이해를 위해 다음 구현을 살펴보겠습니다.

예시

class Solution:
   def solve(self, prices, fee):
      n = len(prices)

      def recur(i=0, flag=0):
         if i == n:
            return 0
         if not flag:
            return max(recur(i + 1, 1) - prices[i], recur(i + 1, 0))
         return max(recur(i + 1, 1), recur(i + 1, 0) + prices[i] - fee)

      return recur()

ob = Solution()
prices = [2, 10, 4, 8]
fee = 3
print(ob.solve(prices, fee))

입력

[2, 10, 4, 8], 3

출력

6