데브허브 | DEVHUB | Maximum Subarray - LeetCode 53 - Kadane's Algorithm - JavaMaximum Subarray - LeetCode 53 - Kadane's Algorithm - Java
- 최대 부분 배열 합 문제(LeetCode 53)는 주어진 정수 배열에서 가장 큰 합을 가지는 연속적인 부분 배열을 찾는 문제입니다. 🧩
- 이 문제는 카데인 알고리즘(Kadane's Algorithm)을 사용하여 효율적으로 해결할 수 있으며, 이는 슬라이딩 윈도우 기법과 유사한 접근 방식을 사용합니다. 💡
- 알고리즘의 핵심은 현재까지의 부분 배열 합(
current_sum)과 전체 배열에서 발견된 최대 합(max_so_far) 두 변수를 유지하는 것입니다. 📊
- 배열을 순회하면서 각 요소를
current_sum에 더합니다. 만약 current_sum이 음수가 되면, 해당 부분 배열은 더 이상 전체 합에 긍정적인 기여를 할 수 없으므로 current_sum을 0으로 재설정하여 새로운 부분 배열을 시작합니다. 🔄
max_so_far는 항상 max_so_far와 current_sum 중 더 큰 값으로 업데이트됩니다. 모든 음수 값으로만 구성된 배열의 경우를 처리하기 위해 max_so_far를 Integer.MIN_VALUE와 같은 최소값으로 초기화해야 합니다. 📉
- 예시
[-2, 1, -3, 4, -1, 2, 1, -5, 4]를 통해 알고리즘을 시뮬레이션하면, current_sum이 음수가 될 때마다 리셋되고 max_so_far가 갱신되어 최종적으로 6이라는 최대 합을 도출합니다. 🚀
- 코드 구현은 간단한 반복문 내에서
current_sum 업데이트, 음수일 경우 리셋, 그리고 max_so_far 업데이트 로직으로 구성됩니다. 💻