{}연습장
대시보드학습스킬 경로문제모의고사라이브 코테복습데이터
문제 목록〉DP〉연속 흑자 구간 찾기← 이전다음 →
#015 · DP중간카데인 알고리즘,구간 추적

연속 흑자 구간 찾기

문제

한 매장의 일별 손익이 profits 배열로 주어집니다. 흑자면 양수, 적자면 음수, 본전이면 0입니다.

경영진은 연속된 며칠을 잘라 홍보 자료에 쓰려고 합니다. 그 구간의 손익 합이 최대가 되도록 고르되, 어느 날부터 어느 날까지인지도 함께 알아야 합니다.

solution(profits) 함수를 작성해 [최대 합, 시작 인덱스, 끝 인덱스] 형태의 배열을 반환하세요. 인덱스는 0부터 시작하고, 끝 인덱스는 구간에 포함됩니다. 구간은 최소 하루 이상이어야 하므로 빈 구간은 고를 수 없습니다(모든 날이 적자여도 하루는 골라야 합니다).

최대 합이 같은 구간이 여럿이면 다음 순서로 하나를 고릅니다.

  1. 더 짧은 구간
  2. 길이도 같다면 시작 인덱스가 더 작은 구간

예시

profits 반환값 설명
[3, -4, 6, -1, 5, -8, 2] [10, 2, 4] 인덱스 2~4의 6, -1, 5 합이 10
[-7, -2, -9] [-2, 1, 1] 전부 적자라 손실이 가장 작은 하루
[1, -1, 1, -1, 1] [1, 0, 0] 합 1인 구간이 여럿 → 가장 짧고 앞선 하루
[5, -2, 5, -9, 6] [8, 0, 2] 5, -2, 5의 합 8이 마지막 날 6보다 큼

제약 조건

  • 1 ≤ profits.length ≤ 100,000
  • -10,000 ≤ profits[i] ≤ 10,000
  • 반환 배열의 길이는 항상 3입니다

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

테스트 케이스

예시 1: 가운데 구간이 최대
입력: profits = [3,-4,6,-1,5,-8,2]
출력: [10,2,4]
예시 2: 전부 적자
입력: profits = [-7,-2,-9]
출력: [-2,1,1]
예시 3: 동점이면 짧고 앞선 구간
입력: profits = [1,-1,1,-1,1]
출력: [1,0,0]
예시 4: 앞쪽 구간이 더 큼
입력: profits = [5,-2,5,-9,6]
출력: [8,0,2]
원소가 하나
입력: profits = [0]
출력: [0,0,0]
전부 흑자 → 전체 구간
입력: profits = [4,1,2]
출력: [7,0,2]
solution.ts
에디터 로딩 중…

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