https://leetcode.com/problems/best-time-to-buy-and-sell-stock
import sys
class Solution:
def maxProfit(self, prices):
profit = 0
min_price = sys.maxsize
for p in prices:
if p < min_price:
min_price = p
continue
if profit < p - min_price:
profit = p - min_price
return profit
그렇게 어렵지 않은 문제였지만 그럼에도 정리를 해 놓는 이유는 문제에 접근할 때 초반에 헤매는 시간이 적지 않기 때문이다.
위의 문제의 핵심 포인트는 반복문의 현재 p
의 값이 min_price
보다 작은지, 큰지를 비교하여 각각의 경우를 다르게 처리해줘야 한다는 것이다.
문제를 풀고 난 지금에야 그렇게 많은 변수가 필요하지 않다는 것을 알고 있지만, 해당 문제를 처음 봤을 때 변수가 정말 많이 필요해보였다.
그래서 지나치게 많은 변수들을 선언했고, 이는 문제를 푸는 나 조차도 어떤 변수가 어떤 값을 담고있는지, 어떻게 연산을 해줘야하는지 헷갈리게 하기 충분했다.
import sys
class Solution:
def maxProfit(self, prices):
min_price, max_price = sys.maxsize, -sys.maxsize - 1
result = 0
...
위의 코드는 내가 문제를 읽자마자 필요할 것 같은 변수들을 선언했던 부분이다.
돌이켜보니, 변수들을 선언한 시점에서 나는 문제에 대한 파악은 끝났다고 생각했던 것 같다.
그래서 이해가 부족한 채로 코드를 계속 짰고, 이는 결과적으로 꽤 긴 시간을 버리게 했다.
만약 실제 코딩 테스트에서 이런 실수를 범한다면 아마 다른 문제들을 풀 시간은 없지 않았을까 ...
항상 문제를 충분히 읽고 시간 복잡도도 고려해 보고 완벽히 이해한 다음에 풀기 시작하자.