Leetcode 714. Best Time to Buy and Sell Stock with Transaction Fee
https://leetcode.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/
Best Time to Buy and Sell Stock with Transaction Fee - LeetCode
Can you solve this real interview question? Best Time to Buy and Sell Stock with Transaction Fee - You are given an array prices where prices[i] is the price of a given stock on the ith day, and an integer fee representing a transaction fee. Find the maxim
leetcode.com
문제
주식 가격이 담긴 prices배열이 주어지고 배열의 각 원소에는 각 날짜의 가격을 나타낸다. 그리고 함께 주어지는 fee는 거래시 발생하는 수수료를 말한다(판매 구매 관계없이 1번만 발생함)
이 때 최대한 많은 수익을 얻을 수 있는 수익값을 반환하라.
해설
class Solution:
def maxProfit(self, prices: List[int], fee: int) -> int:
min_p = prices[0] + fee
res = 0
for p in prices:
if min_p < p:
res += p-min_p
min_p = p
elif p+fee < min_p:
min_p = p + fee
return res
잘 모르겠어서 해설을 찾아봤고 내가 작성한 답은 아니지만 간단하고 명료해서 코드를 분석해봤다. 예제로 만약
prices = [1,3,7,5,10,3], fee = 3
가 주어진다면 위의 코드에서 먼저 수수료를 합친 min_p를 설정한다. 그리고 이 min_p보다 가격이 높을 때에 res에 값을 추가하고 판 가격을 그대로 min_p에 저장한다.
min_p = p
왜 min_p에 수수료를 더하지 않느냐고 물어볼 수 있는데 문제에서 제시한 최대의 이익을 얻기 위해서는 7 이후에 더 좋은 가격이 나올 수 있는 가능성을 위해 수수료를 더하지 않는 것이다. 만약 수수료를 더했다면 이는 거래를 새로 다시 하는 것이지 더 좋은 가격에서 팜을 의미하는 것이 아니다.
그렇게 최대의 수익을 결정할 수 있으며 새로운 거래를 위해서 현재 설정된 min_p보다 낮은 가격이 등장하는 경우 새로운 거래를 시작하여 주어진 가격 하에서 최대의 수익을 얻을 수 있다.