{}연습장
대시보드학습스킬 경로문제모의고사라이브 코테복습데이터
문제 목록〉수학〉락업 기간이 걸린 사내 주식 매도← 이전다음 →
#018 · 수학중간최솟값 추적,지연 제약

락업 기간이 걸린 사내 주식 매도

문제

사내 우리사주 계좌에서는 주식을 산 뒤 락업(의무 보유) 기간 이 끝나야 팔 수 있습니다. d일짜리 락업이 걸려 있다면, i일에 산 주식은 i + d일 이후(당일 포함)에만 팔 수 있습니다.

일별 종가가 prices 배열로 주어집니다(prices[i]는 i일의 가격). 계좌에서는 매수 1회, 매도 1회 만 할 수 있습니다.

이익이 가장 큰 매매의 [이익, 매수일, 매도일]을 반환하는 solution(prices, d) 함수를 작성하세요. 이익이 0보다 큰 매매가 하나도 없다면 아무것도 사지 않고 [0, -1, -1]을 반환합니다.

이익이 같은 매매가 여럿이면 매도일이 더 빠른 쪽, 그래도 같으면 매수일이 더 빠른 쪽 을 답으로 합니다.

예시

prices=[12,9,14,7,10,18,11], d=2 → [11, 3, 5]
  3일에 7로 사서 5일에 18에 판다(5 - 3 = 2 ≥ d). 이익 11.
 
prices=[5,30,6,9], d=2         → [4, 0, 3]
  0일에 5로 사고 1일에 30에 팔면 이익 25지만 락업이 2일이라 불가능하다.
  가능한 매매 중에서는 0일 매수 → 3일 매도(이익 4)가 최선이다.
 
prices=[20,17,15,12], d=1      → [0, -1, -1]
  어떤 조합도 이익이 0보다 크지 않다.
 
prices=[1,5,1,5], d=1          → [4, 0, 1]
  (0,1)과 (0,3) 모두 이익 4지만 매도일이 빠른 (0,1)을 고른다.

제약 조건

  • 1 ≤ prices.length ≤ 100,000
  • 0 ≤ prices[i] ≤ 100,000
  • 1 ≤ d ≤ 100,000 (d가 prices.length 이상이면 매매 자체가 불가능합니다)
  • 매수일 < 매도일이며, 매도일 - 매수일 ≥ d 를 만족해야 합니다

시간 복잡도 목표: O(N)

테스트 케이스

예시 1: 락업 2일, 3일 매수 → 5일 매도
입력: prices = [12,9,14,7,10,18,11], d = 2
출력: [11,3,5]
예시 2: 최고가 매도가 락업에 막히는 경우
입력: prices = [5,30,6,9], d = 2
출력: [4,0,3]
예시 3: 계속 하락해 매매하지 않음
입력: prices = [20,17,15,12], d = 1
출력: [0,-1,-1]
예시 4: 이익이 같으면 매도일이 빠른 쪽
입력: prices = [1,5,1,5], d = 1
출력: [4,0,1]
엣지: 락업이 기간 전체보다 길어 매매 불가
입력: prices = [3,8], d = 2
출력: [0,-1,-1]
엣지: 같은 가격이 이어질 때 가장 이른 매수일
입력: prices = [4,4,9,9], d = 1
출력: [5,0,2]
solution.ts
에디터 로딩 중…

▶ 실행은 기록 없이 채점만, 제출은 결과가 진행률·오답노트에 기록됩니다.