121 성공

This commit is contained in:
2026-10-13 14:47:08 +09:00
parent 6c6b528a7f
commit d07a014c66

26
repetition/dp/121.py Normal file
View File

@@ -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번째 값들에 대해 본인들이 최소라고 가정할 때 차이의 최대값 중 최대값을 기록해놓으면 그것이 답이다.
"""