출처: leetcode.com/problems/best-time-to-buy-and-sell-stock-ii/
문제
한글 번역은 아래 더보기를 클릭해주세요.
더보기
배열 prices의 i번째 엘리먼트의 값은 day i의 주가를 의미한다.
이 때, 얻을 수 있는 최고 수익을 구하여라. 원하는 대로 트랜잭션을 진행 수 있다. (예, 주식 1주를 매수하여 1주를 매도하는 과정을 여러 번 수행할 수 있다)
주의: 여러 개의 트랜잭션을 동시에 수행할 수는 없다. 매수 전에는 매도하여 보유한 주식이 없어야 한다.
예제 1:
- 입력: prices = [7, 1, 5, 3, 6, 4]
- 출력: 7
- 설명: 1일(가격 = 1)에 사고 3일(가격=5)에 판다, 수익 = 5 - 1 = 4.
그리고나서 4일(가격 = 3)에 사고 5일(가격=6)에 판다, 수익 = 6 - 3 = 3
예제 2:
- 입력: prices = [1, 2, 3, 4, 5]
- 출력: 4
- 설명: 1일(가격 = 1)에 사고 5일(가격=5)에 판다, 수익 = 5 - 1 = 4.
1일에 사고, 2일에 사고 나중에 팔 수 없다. 동시에 여러 개의 트랜잭션을 같게 되기 때문이다. 다시 사기 전에 반드시 팔아야 한다.
예제 2:
- 입력: prices = [7, 6, 4, 3, 1]
- 출력: 0
- 설명: 이 경우, 매수매도는 이루어지지 않았다. 예, 최대 수익 = 0
제약조건:
- 1 <= prices.length <= 3 * 10^4
- 0 <= prices[i] <= 10^4
풀이
해결방법
주식을 안 갖고 있을 때, 오늘 가격이 내일 가격보다 싸면 매수
주식을 갖고 있을 때, 오늘이 마지막 날이거나, 오늘 가격이 내일 가격보다 비싸면 매도
javascript
/**
* @param {number[]} prices
* @return {number}
*/
var maxProfit = function(prices) {
let hasStock = false;
let myStock = 0;
let benefit = 0;
for(let i = 0, len = prices.length; i < len; i += 1) {
if (!hasStock && prices[i] < prices[i + 1]) {
// 주식을 안 갖고 있을 때, 오늘 가격이 내일 가격보다 싸면 매수
hasStock = true;
myStock = prices[i];
} else if (hasStock && (i === len - 1 || prices[i] > prices[i + 1])) {
// 주식을 갖고 있을 때, 오늘이 마지막 날이거나, 오늘 가격이 내일 가격보다 비싸면 매도
benefit += (prices[i] - myStock);
hasStock = false;
}
}
return benefit;
};
python
class Solution:
def maxProfit(self, prices: List[int]) -> int:
hasStock = False
myStock = 0
benefit = 0
priceLen = len(prices)
for i in range(priceLen):
if hasStock is False and i < priceLen - 1 and (prices[i] < prices[i + 1]):
hasStock = True
myStock = prices[i]
elif hasStock is True and (i == priceLen - 1 or prices[i] > prices[i + 1]):
benefit += (prices[i] - myStock)
hasStock = False
print(prices[i], myStock, benefit)
return benefit
결과
'CS기초 > 코딩테스트' 카테고리의 다른 글
LeetCode 392 (Easy) Is Subsequence (0) | 2021.03.03 |
---|---|
LeetCode 1710 (Easy) Maximum Units on a Truck (0) | 2021.03.03 |
LeetCode 1217 (Easy) Minimum Cost to Move Chips to The Same Position (0) | 2021.02.24 |
LeetCode 1725 (Easy) Number Of Rectangles That Can Form The Largest Square (0) | 2021.02.24 |
LeetCode 1221 (Easy) Split a String in Balanced Strings (0) | 2021.02.24 |