StackOfIntegers 클래스에 관한 질문

DaSeungLee Reply 4 years 51 weeks ago
push 메소드에서 만약 size가 capacity보다 크거나 같으면 capacity를 두 배늘려주는 것으로 이해하고 있는데, 그냥 새로운 값이 1개 push되면 capacity를 1만 증가시켜서 저장하면되지, 왜 크기가 2배나 큰 배열을 만들어서 참조하도록 하는 건가요?
withcs2 Reply 4 years 51 weeks ago
Stack은 값마다 메모리를 배당합니다.(배열 만들어서 참조) Capacity를 1씩 증가시키면 capacity 1씩 증가시키고 메모리 재배당하는 과정을 push될 때마다 반복해야합니다. 만약 capacity 1짜리 stack에 1000000개를 push하려면 이 과정을 1000000번 반복하게 되겠죠. Capacity를 2배씩 증가시키면 메모리 낭비는 있겠지만 재배당하는 과정이 줄어듭니다. 만약 capacity 1짜리 stack에 1000000개를 push하려면 재배당을 20번만 하면 됩니다. 물론 이 방법은 어느정도의 메모리 낭비는 있습니다만, 대신 runtime을 효과적으로 줄였습니다. 이처럼 공간복잡도(메모리)를 늘려서 시간복잡도(runtime)를 줄이는 알고리즘 기법이 많은데, 대표적인 예시로는 계수정렬이 있습니다. 알고리즘 수강하게 되면 시간복잡도와 공간복잡도에 대해 자세히 배우게 될테니 지금은 일단 메모리 아끼는 것 보다는 runtime 줄이는 게 더 효율적이라는 것만 알아두시면 좋을 것 같습니다.
DaSeungLee Reply 4 years 50 weeks ago
아 그런거였군요 자세한 설명 감사합니다!!