이번 강좌에서는 코딩 테스트에서 자주 출제되는 알고리즘 문제 중 하나인 “연속 합 구하기”에 대해 자세히 알아보겠습니다. 스위프트를 사용하여 문제를 해결하는 방법과 효율적인 알고리즘을 작성하는 과정을 단계별로 설명하겠습니다.
문제 설명
주어진 정수 배열에서 연속된 요소들의 합 중 최대값을 구하는 문제입니다. 예를 들어, 배열이 [1, -2, 3, 4, -1, 2, 1, -5, 4]
일 때, 연속된 합의 최대값은 3 + 4 + -1 + 2 + 1 = 9
입니다.
입력
- 정수 n (1 ≤ n ≤ 106): 배열의 요소 수
- 배열 A의 요소 (−109 ≤ Ai ≤ 109): 배열의 각 요소
출력
- 연속된 합의 최대값을 출력합니다.
문제 접근 방식
이 문제를 해결하기 위해 사전 지식으로 카데인 알고리즘(Kadane’s Algorithm)을 사용할 것입니다. 이 알고리즘은 O(n) 시간 복잡도로 문제를 해결할 수 있는 효율적인 방법입니다.
카데인 알고리즘 설명
카데인 알고리즘은 다음과 같은 방식으로 작동합니다:
- A 배열을 순회하면서 각 요소를 더해 나갑니다.
- 현재까지의 합이 0보다 작을 경우, 합을 0으로 초기화합니다.
- 각 단계에서 현재 합의 최대값을 유지합니다.
스위프트 코드 구현
이제 스위프트로 카데인 알고리즘을 구현해보겠습니다.
import Foundation
func maxSubArraySum(_ nums: [Int]) -> Int {
var maxSum = nums[0] // 최대 연속합 초기화
var currentSum = nums[0] // 현재 연속합 초기화
for i in 1..
코드 설명
위 코드는 다음과 같은 절차로 이루어져 있습니다:
- 입력으로 정수 배열
nums
를 받습니다. - 최대 합과 현재 합을 배열의 첫 번째 요소로 초기화합니다.
- 배열을 순회하며 각 요소를 더하면서 최대 합을 계산합니다.
- 결과적으로 연속 합의 최대값을 반환합니다.
복잡도 분석
- 시간 복잡도: O(n) – 배열을 한 번만 순회합니다.
- 공간 복잡도: O(1) – 필수 변수 외에는 추가 공간을 사용하지 않습니다.
결론
이번 강좌에서는 스위프트를 사용하여 “연속 합 구하기” 문제를 해결하는 방법과 카데인 알고리즘에 대해 배웠습니다. 이 알고리즘은 다양한 코딩 테스트 문제에서 효과적으로 사용될 수 있으므로, 꼭 숙지해 두는 것이 좋습니다. 더 나아가 다양한 배열 문제를 접하면서 여러분의 알고리즘 실력을 더욱 향상시켜 보세요!