문제 9 · 배열 하나로 스택 2개
문제 9 [4점]
크기가 push)과 제거(remove) 연산의 성능이
풀이 및 해설
구현 방법(2점). 두 스택이 배열의 양쪽 끝에서 서로 마주 보며 가운데로 자라나도록 배치합니다.
- 스택 1은 왼쪽 끝에서 시작합니다.
top1을 로 두고, 커질 때 방향(오른쪽)으로 증가시킵니다. - 스택 2는 오른쪽 끝에서 시작합니다.
top2를 으로 두고, 커질 때 방향(왼쪽)으로 감소시킵니다.
index: 0 1 2 ... N-2 N-1
[S1 →→→ ] (빈 공간) [ ←←← S2]
top1 이 오른쪽으로 top2 가 왼쪽으로두 스택은 가운데의 빈 공간을 공유하므로, 어느 한쪽이 크더라도 총합이
push1(x): 가득 찼는지(top1 + 1 == top2) 확인 후,arr[++top1] = x.push2(x): 가득 찼는지 확인 후,arr[--top2] = x.pop1():arr[top1--]반환.pop2():arr[top2++]반환.
포화 판정은 두 top이 만나는지(top1 + 1 == top2)로 하며, 원소 이동이 전혀 없습니다.