주식과 같이 매 순서마다 바뀌는 가격에 따라 최대의 이윤을 남기는 문제이다.
여기서 나는 우선 "가장 낮은 가격대를 기준으로 고르면 금방이겠네!"라고 생각을 했지만, 아니었다.
이 와 같은 경우 가장 낮은 수는 1이지만, 이윤은 남길 수 있었다.
그렇다면, 우리는 두가지를 고려해야 한다, 하나는 언제 살지를 의미하는 "최소값"과 판 후의 "최대 이윤"이다.
class Solution:
def maxProfit(self, prices: List[int]) -> int:
m, M = float('inf'), 0
for price in prices:
if price < m:
m = price
profit = price - m
if profit > M:
M = profit
return M
우선 최소값으로 가장 작은건 0이라고 문제 아래에 표시를 해 주었지만, 많은 문제에서 값을 적당히 주면 1000000000000000과 같은 극단적인 경우의 수를 내놓기 때문에 float('inf')라는 무한이라는 수치를 사용하는 것에 익숙해지는 것이 좋다(float('-inf')는 마이너스 무한이다).
우선 prices라는 리스트에서 값을 price로 받아주고, 이 값이 m(최소값)보다 작을 경우 대치해주고, 이윤을 본다(첫번째 반복일 경우에는 이윤이 "본인 빼기 본인"이므로 0이 나오는게 맞다).
후에 기존에 있는 이윤보다 "큰지"만 확인하는게 중요하기 때문에, 만약에 크다면 M(최대 이윤)을 대치해준다.
그리고 for문이 다 돌면 결과적으로 남는 최대 이윤 M을 반환하면 된다.
(리스트 명칭 뒤에 s가 붙어 있는 경우는 실무에서도 많이 사용하고, 이를 꺼내올 때 s를 없애는 경우도 많이 쓴다, 다만 혼자 코딩을 풀다보면, 명칭을 쓰는게 귀찮아져서 짧게 쓰는 경우가 많은데, 지금 익숙해지는 것이 좋다)
'리트코드 알고리즘 > 리트코드 easy' 카테고리의 다른 글
(간단한 코드)리트코드 228. Summary Ranges (0) | 2024.12.10 |
---|---|
(간단한 코드)리트코드 14. Longest Common Prefix (0) | 2024.12.08 |
(간단한 코드)리트코드 392. Is Subsequence (0) | 2024.12.08 |
(간단한 코드)리트코드 1768. Merge Strings Alternately (0) | 2024.12.03 |
(간단한 코드)리트코드 2239. Find Closest Number to Zero (0) | 2024.12.02 |