diff --git a/repetition/dp/121.py b/repetition/dp/121.py new file mode 100644 index 0000000..e8f7284 --- /dev/null +++ b/repetition/dp/121.py @@ -0,0 +1,26 @@ +# Best Time to Buy and Sell Stock + +class Solution: + def maxProfit(self, prices: list[int]) -> int: + answer = 0 + + now_max_price = prices[-1] + + for i in range(len(prices)-1, -1, -1): + answer = max(answer, now_max_price - prices[i]) + now_max_price = max(now_max_price, prices[i]) + + + return answer + +""" +걸린 시간: 15분 + +복잡도: prices 리스트를 한번 순회하는데, 각 반복마다 변수 간 최대값 계산만 하기 때문에 전체 시간복잡도는 O(n)이다. +변수 2개만 사용하기 때문에 공간복잡도는 O(1)이다. + +해설: 앞에 나온 최소값과 그 뒤에 나온 최댓값의 차이가 가장 큰 것을 찾는 문제인데, 앞으로 나올 최대값은 뭐가 될지 모르기 때문에 +뒤에서부터 prices 리스트를 읽으면서 최대값을 기록하면서 오면 i번째를 보는 시점에 최대값은 뒤에 있는 모든 수 중 최대값이므로 +i번째 값이 최소라고 가정할 때의 최선을 플레이를 확인할 수 있다. +이렇게 모든 i번째 값들에 대해 본인들이 최소라고 가정할 때 차이의 최대값 중 최대값을 기록해놓으면 그것이 답이다. +"""