전체 회차
A-015Day 152026.05.17easyleetcode #121neetcode150

주식을 사고팔기 가장 좋은 시점

#array#dynamic-programming
leetcode #121 · best-time-to-buy-and-sell-stock
01

문제

· problem
P.015

주식을 사고팔기 가장 좋은 시점

leetcode #121

정수 배열 prices가 주어지며, prices[i]는 i번째 날의 주식 가격입니다. 한 주의 주식을 사는 하나의 날과 그 이후의 다른 날에 파는 날을 선택하여 이득을 최대화하려고 합니다. 이 거래에서 얻을 수 있는 최대 이득을 반환하세요. 이득을 얻을 수 없다면 0을 반환하세요.

제약
  • · 1 ≤ prices.length ≤ 10⁵
  • · 0 ≤ prices[i] ≤ 10⁴
// 지문은 본인 언어 요약 — 원문은 위 링크에서
입출력 예시
example 1input → output
[7,1,5,3,6,4]
5
example 2input → output
[7,6,4,3,1]
0
02

사전 사고

· pre-solve
● 1리스트 출력● 2선택● 3정답 공개
  • 같은 날에 사서 팔 수 있나요?
  • 반드시 거래를 완료해야 하나요?
  • 여러 번 사고팔 수 있나요?
  • 가격이 계속 내려가면 무엇을 반환하나요?
  • 미래의 가격을 미리 알고 의사결정하나요?
  • 배열의 길이가 1이면 어떻게 하나요?
던질 질문에 체크하고 확인을 누르세요
// 결과는 세션 메모리만 — 새로고침하면 초기화됩니다 (반복 학습)
03

논리 구조

· logic
● 1슬롯 출력● 2슬롯별 선택● 3정답 공개
// 각 슬롯에 들어갈 코드 한 줄을 골라 알고리즘 흐름을 합성해보세요. 코드는 안 짜지만 논리 뼈대는 직접.
step 1· 결과 변수 초기화
res = 0
res = float('-inf')
res = prices[0]
step 2· 최소 가격 초기화
lowest = prices[0]
lowest = float('inf')
lowest = 0
step 3· 배열 순회
for price in prices:
for i in range(1, len(prices)):
for price in prices[1:]:
step 4· 새로운 최솟값 확인중첩
if price < lowest:
if price <= lowest:
if price > lowest:
step 5· 최솟값 업데이트│ │ 중첩
lowest = price
min_price = price
lowest = price - res
step 6· 최대 이득 계산 및 업데이트중첩
res = max(res, price - lowest)
res = price - lowest
res = max(res, lowest - price)
step 7· 결과 반환
return res
return lowest
return max(res, lowest)
각 슬롯에 한 줄씩 골라보세요
// format: slot — 다른 패턴(재귀·DP 등) 은 ordering·state-first 등 별도 format. ADR-08 후속.
04

문제풀이 · 트레이스

· solve
solution.py
1
class Solution:
2
    def maxProfit(self, prices: List[int]) -> int:
3
        res = 0
4
        
5
        lowest = prices[0]
6
        for price in prices:
7
            if price < lowest:
8
                lowest = price
9
            res = max(res, price - lowest)
10
        return res
머릿속 dry-run 케이스
// 각 케이스를 머릿속으로 따라가보세요. 막히면 아래 worked example 펼침.
case 1
[7,1,5,3,6,4]
5
case 2
[7,6,4,3,1]
0
// UI 가 walk-through 안 함 — 학습자가 머릿속으로. 막히면 worked example 펼침.