공간복잡도는 알고리즘을 실행할 때 필요한 메모리의 양을 나타냅니다.
시간복잡도가 실행 시간의 효율성을 분석한다면, 공간복잡도는 메모리 사용량의 효율성을 분석합니다.
공간복잡도는 고정 공간과 가변 공간의 합으로 계산됩니다.
고정 공간 (Fixed Space)
가변 공간 (Variable Space)
Big-O 표기법을 통해 입력 크기 ( n )에 따라 메모리 사용량의 증가율을 나타냅니다.
( O(1) ): 상수 공간
int sumArray(int[] arr) {
int sum = 0; // O(1) 공간 사용
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
( O(n) ): 선형 공간
int[] createArray(int n) {
return new int[n]; // O(n) 공간 사용
}
( O(n^2) ): 제곱 공간
재귀 함수는 호출될 때마다 호출 스택에 데이터를 저장하므로, 공간복잡도가 증가합니다.
int fibonacci(int n) {
if (n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
알고리즘 설계 시 시간복잡도와 공간복잡도를 함께 고려해야 합니다.
종종 공간을 더 많이 사용하여 시간을 줄이거나, 시간을 더 들여 공간을 줄이는 선택을 해야 합니다.
공간복잡도는 시간복잡도만큼 중요한 개념임을 느꼈습니다. 특히 대규모 데이터를 다루거나 메모리 자원이 제한된 환경에서의 개발 경험은, 메모리 관리와 효율성의 중요성을 다시금 깨닫게 해줍니다. 앞으로 더 복잡한 문제를 해결할 때도 효율성과 안정성을 최우선으로 고려해야겠습니다.