A-015● Day 152026.05.17easyleetcode #121neetcode150
주식을 사고팔기 가장 좋은 시점
#array#dynamic-programming
01
문제
· problem정수 배열 prices가 주어지며, prices[i]는 i번째 날의 주식 가격입니다. 한 주의 주식을 사는 하나의 날과 그 이후의 다른 날에 파는 날을 선택하여 이득을 최대화하려고 합니다. 이 거래에서 얻을 수 있는 최대 이득을 반환하세요. 이득을 얻을 수 없다면 0을 반환하세요.
제약
- · 1 ≤ prices.length ≤ 10⁵
- · 0 ≤ prices[i] ≤ 10⁴
// 지문은 본인 언어 요약 — 원문은 위 링크에서
입출력 예시
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머릿속 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 펼침.