재할당이 일어나는 순간
문제 1과 3의 동적 배열은 원소 수 n이 용량(capacity)과 같을 때 추가하려 하면 용량을 max(1, 2n)으로 늘리고, 삭제 뒤 capacity ≥ 3n이면 용량을 max(1, 2n)으로 줄인다.
용량 1인 빈 동적 배열의 끝에 원소 9개를 차례로 추가한다.
- 재할당이 일어나는 추가가 몇 번째 호출인지, 그때 복사하는 원소 수와 새 용량을 모두 적는다.
- 9번 추가한 뒤의 용량과 원소 수를 적는다.
- 이어서 끝에서 원소를 하나씩 삭제할 때, 처음으로 용량이 줄어드는 삭제가 몇 번째인지와 줄어든 용량을 적는다.
- 줄인 뒤에도 빈 칸을 남겨 두는 이유를 적는다.
해설 펼치기
- 2번째 호출(원소 1개 복사, 용량 2), 3번째 호출(2개 복사, 용량 4), 5번째 호출(4개 복사, 용량 8), 9번째 호출(8개 복사, 용량 16)이다.
- 용량 16, 원소 수 9다.
- 삭제할 때마다 n이 8, 7, 6, 5로 준다. 4번째 삭제 뒤 n = 5에서 16 ≥ 3·5 = 15가 되어 용량을 max(1, 10) = 10으로 줄인다.
- 줄인 직후에도 여유 칸이 있어야 추가와 삭제가 번갈아 일어날 때 매번 재할당하지 않는다. 용량과 원소 수는 다르며, 원소가 절반 아래로 내려가자마자 줄이지 않는다.