최대 부분배열 합(카데인) 계산기
수열에서 합이 가장 큰 연속 구간을 카데인 알고리즘으로 한 번에 찾습니다. 갱신 과정을 단계별로 보여 주고, 원형 배열과 최대 곱 부분배열 변형, 그리고 전부 음수일 때 갈리는 답까지 함께 다룹니다.
공백·쉼표·줄바꿈으로 나눈 숫자. 2000개까지
최대 부분배열 합
6
4번째 ~ 7번째 (4, -1, 2, 1) 구간입니다. 길이 4, 전체 9개 중 44.4%입니다.
원형 배열로 보면
곱으로 보면
갱신 과정
| i | 값 | cur | 판단 | 지금까지 최대 |
|---|---|---|---|---|
| 1 | -2 | -2 | 여기서 새로 시작 | -2 |
| 2 | 1 | 1 | 여기서 새로 시작 | 1 |
| 3 | -3 | -2 | 이어 붙임 | 1 |
| 4 | 4 | 4 | 여기서 새로 시작 | 4 |
| 5 | -1 | 3 | 이어 붙임 | 4 |
| 6 | 2 | 5 | 이어 붙임 | 5 |
| 7 | 1 | 6 | 이어 붙임 | 6 |
| 8 | -5 | 1 | 이어 붙임 | 6 |
| 9 | 4 | 5 | 이어 붙임 | 6 |
사용 방법
- 1수열을 공백이나 쉼표로 나눠 넣습니다. 음수가 섞여야 문제가 재미있어집니다.
- 2최대 부분배열 합과 그 구간이 바로 나옵니다.
- 3갱신 과정 표에서 어디서 «끊고 새로 시작했는지»를 확인합니다.
- 4원형 배열로 볼 때의 답과, 곱으로 볼 때의 답도 함께 나옵니다.
- 5O(n²) 완전탐색 결과와 나란히 놓아 검산합니다.
자주 묻는 질문
«여기서 끊을까, 이어 붙일까»라는 한 줄 판단이 전부입니다. cur = max(x, cur + x)로 지금까지의 합이 음수면 이어 붙여 봐야 손해이므로 버리고 새로 시작합니다. 이 한 줄 덕분에 모든 시작·끝 짝을 보는 O(n²)이 한 번 훑는 O(n)이 됩니다.
문제가 «빈 구간»을 허용하느냐에 따라 갈립니다. 적어도 한 개는 골라야 한다면 가장 덜 음수인 원소 하나가 답이고, 빈 구간(합 0)을 허용하면 0이 답입니다. 실전에서 가장 흔한 버그가 여기이며, 이 계산기는 두 답을 모두 보여 줍니다.
두 경우 중 큰 쪽을 고릅니다. 가운데를 고르는 경우는 보통의 카데인이고, 끝과 처음에 걸치는 경우는 «전체합 − 최소 부분배열 합»입니다. 다만 전부 음수면 두 번째 식이 전부 빼는 빈 구간을 뜻하게 되어 0이 나와 버리므로 그때는 첫 번째 식만 써야 합니다 — 원형 카데인의 유일한 함정입니다.
음수 둘이 곱해지면 양수가 되기 때문입니다. 지금까지의 최댓값만 들고 가면 −2 같은 값에서 끊어 버려 나중에 다른 음수를 만나 커질 기회를 놓칩니다. 그래서 최솟값도 함께 들고 가다가 음수를 만나면 둘을 맞바꿉니다. 0을 만나면 둘 다 끊깁니다.
전송되지 않습니다. 모든 계산은 브라우저 안에서만 이뤄지고, 입력값은 이 기기의 저장소에만 남습니다.
알아두면 좋은 점
- 같은 합을 갖는 구간이 여러 개일 수 있습니다. 이 계산기는 가장 먼저 찾은 하나를 보여 줍니다.
- 2차원(최대 부분행렬)은 다루지 않습니다. 열 구간을 고정하고 행 방향으로 카데인을 돌리면 O(n³)에 풀 수 있습니다.
- 자바스크립트의 수 표현을 그대로 씁니다. 곱이 2⁵³을 넘으면 정확하지 않을 수 있습니다.
- 무작위 수열 2000개에서 O(n²) 완전탐색과 대조해 검증했습니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 2일 · 결과는 참고용 추정치입니다.